Java에서 값으로 날짜 객체를 만드는 방법
2014-02-11 날짜에 대한 날짜 개체가 필요합니다. 이렇게 직접 만들 수는 없지만
Date myDate = new Date(2014, 02, 11);
그래서 저는 다음과 같이하고 있습니다.
Calendar myCalendar = new GregorianCalendar(2014, 2, 11);
Date myDate = myCalendar.getTime();
자바에서 날짜 객체를 만드는 쉬운 방법이 있습니까?
First Gotcha : 2를 월로 전달하면 예상치 못한 결과를 얻을 수 있습니다. 월은 0부터 시작하므로 2는 실제로 3 월입니다.
캘린더를 사용하는 것이 이미 충분히 쉽다고 생각하기 때문에 찾고있는 "쉬운"방법이 무엇인지 모르겠습니다.
월에 올바른 상수를 사용해야합니다.
Date date = new GregorianCalendar(2014, Calendar.FEBRUARY, 11).getTime();
또 다른 방법은 일반적으로 다음과 같은 유틸리티가있는 DateFormat을 사용하는 것입니다.
public static Date parseDate(String date) {
try {
return new SimpleDateFormat("yyyy-MM-dd").parse(date);
} catch (ParseException e) {
return null;
}
}
내가 간단히 쓸 수 있도록
Date myDate = parseDate("2014-02-14");
내가 선호하는 또 다른 대안 : 더 이상 Java Date / Calendar를 사용하지 마십시오. JODA 시간 또는 Java 시간 (JDK 8 이상에서 사용 가능)으로 전환하십시오. LocalDate날짜를 나타내는 데 사용할 수 있으며 다음과 같이 쉽게 만들 수 있습니다.
LocalDate myDate =LocalDate.parse("2014-02-14");
// or
LocalDate myDate2 = new LocalDate(2014, 2, 14);
// or, in JDK 8+ Time
LocalDate myDate3 = LocalDate.of(2014, 2, 14);
tl; dr
LocalDate.of( 2014 , 2 , 11 )
끔찍한 이전 java.util.Date클래스 를 사용하고 싶다면 현대 java.time 클래스 에서 변환하십시오 .
java.util.Date // Terrible old legacy class, avoid using. Represents a moment in UTC.
.from( // New conversion method added to old classes for converting between legacy classes and modern classes.
LocalDate // Represents a date-only value, without time-of-day and without time zone.
.of( 2014 , 2 , 11 ) // Specify year-month-day. Notice sane counting, unlike legacy classes: 2014 means year 2014, 1-12 for Jan-Dec.
.atStartOfDay( // Let java.time determine first moment of the day. May *not* start at 00:00:00 because of anomalies such as Daylight Saving Time (DST).
ZoneId.of( "Africa/Tunis" ) // Specify time zone as `Continent/Region`, never the 3-4 letter pseudo-zones like `PST`, `EST`, or `IST`.
) // Returns a `ZonedDateTime`.
.toInstant() // Adjust from zone to UTC. Returns a `Instant` object, always in UTC by definition.
) // Returns a legacy `java.util.Date` object. Beware of possible data-loss as any microseconds or nanoseconds in the `Instant` are truncated to milliseconds in this `Date` object.
세부
"쉬움"을 원한다면 Java와 함께 번들로 제공되는 악명 높은 java.util.Date 및 .Calendar 클래스 대신 Java 8 의 새로운 java.time 패키지 를 사용해야합니다 .
java.time
Java 8 이상에 내장 된 java.time 프레임 워크는 성가신 이전 java.util.Date/.Calendar 클래스를 대체합니다.
날짜 만
LocalDate클래스는 모든 시간의 일 또는 시간대없이 날짜 만 값을 나타 내기 위해 java.time에 의해 제공됩니다. 예를 들어 몬트리올보다 파리에서 새로운 날이 일찍 시작되므로 날짜를 결정하려면 시간대가 필요합니다. ZoneId클래스는 시간대입니다.
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
LocalDate today = LocalDate.now( zoneId );
콘솔에 덤프 :
System.out.println ( "today: " + today + " in zone: " + zoneId );
오늘 : 2015-11-26 영역 : 아시아 / 싱가포르
또는 공장 방법을 사용하여 년, 월, 일을 지정하십시오.
LocalDate localDate = LocalDate.of( 2014 , Month.FEBRUARY , 11 );
localDate : 2014-02-11
또는 DayOfWeekenum 개체가 아닌 월 번호 1-12를 전달 합니다.
LocalDate localDate = LocalDate.of( 2014 , 2 , 11 );
시간대
A LocalDate는 시간대로 조정하기 전까지는 실제 의미가 없습니다. java.time에서는 ZonedDateTime객체 를 생성하기 위해 시간대를 적용 합니다. 그것은 또한 하루 중 시간을 의미하지만 몇시입니까? 일반적으로 하루 중 첫 번째 순간으로 이동하는 것이 좋습니다. 시간을 의미한다고 생각할 수 00:00:00.000있지만 DST (일광 절약 시간) 및 기타 이상 현상 때문에 항상 사실은 아닙니다. 그 시간을 가정하는 대신, 우리는를 호출하여 하루의 첫 번째 순간을 결정하도록 java.time을 요청 atStartOfDay합니다.
지정 적절한 시간대 이름 의 형식 continent/region예컨대, America/Montreal, Africa/Casablanca, 또는 Pacific/Auckland. 절대로 같은 3-4 문자 약어를 사용하지 EST또는 IST있는 그대로 하지 진정한 시간대가 아닌 표준화, 심지어 고유하지 않은 (!).
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );
zdt : 2014-02-11T00 : 00 + 08 : 00 [아시아 / 싱가포르]
UTC
백엔드 작업 (비즈니스 로직, 데이터베이스, 데이터 저장 및 교환)의 경우 일반적으로 UTC 시간대를 사용 합니다. java.time에서 Instant클래스는 UTC로 타임 라인의 순간을 나타냅니다. Instant 객체는를 호출하여 ZonedDateTime에서 추출 할 수 있습니다 toInstant.
Instant instant = zdt.toInstant();
즉시 : 2014-02-10T16 : 00 : 00Z
변하게 하다
java.util.Date클래스를 완전히 사용하지 않아야합니다 . 그러나 java.time 에 대해 아직 업데이트되지 않은 이전 코드와 상호 운용해야하는 경우 앞뒤로 변환 할 수 있습니다. 이전 클래스에 추가 된 새로운 변환 방법을 찾으십시오.
java.util.Date d = java.util.from( instant ) ;
…과…
Instant instant = d.toInstant() ;
java.time 정보
java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이나 클래스 가 필요하지 않습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
- Java SE 8 , Java SE 9 , Java SE 10 , Java SE 11 이상 -번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- java.time 기능의 대부분은 ThreeTen-Backport의 Java 6 및 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스 의 최신 버전의 Android 번들 구현 .
- 이전 Android (<26)의 경우 ThreeTenABP 프로젝트는 ThreeTen-Backport (위에서 언급)를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 곳입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 더 .
업데이트 : Joda-Time 라이브러리는 이제 유지 관리 모드에 있으며 java.time 클래스 로의 마이그레이션을 권장 합니다. 나는 역사를 위해이 섹션을 남겨두고있다.
Joda-Time
2 월은 그래서 우선, Joda 타임은 합리적인 번호를 사용 2하지 1. 또 다른 한가지, Joda-Time DateTime은 시간대가있는 것처럼 보이지만 그렇지 않은 java.util.Date와 달리 할당 된 시간대를 진정으로 알고 있습니다.
그리고 시간대를 잊지 마세요. 그렇지 않으면 JVM의 기본값을 얻게됩니다.
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Singapore" );
DateTime dateTimeSingapore = new DateTime( 2014, 2, 11, 0, 0, timeZone );
DateTime dateTimeUtc = dateTimeSingapore.withZone( DateTimeZone.UTC );
java.util.Locale locale = new java.util.Locale( "ms", "SG" ); // Language: Bahasa Melayu (?). Country: Singapore.
String output = DateTimeFormat.forStyle( "FF" ).withLocale( locale ).print( dateTimeSingapore );
콘솔에 덤프…
System.out.println( "dateTimeSingapore: " + dateTimeSingapore );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "output: " + output );
실행하면…
dateTimeSingapore: 2014-02-11T00:00:00.000+08:00
dateTimeUtc: 2014-02-10T16:00:00.000Z
output: Selasa, 2014 Februari 11 00:00:00 SGT
변환
다른 클래스와 함께 사용하기 위해 java.util.Date로 변환해야하는 경우…
java.util.Date date = dateTimeSingapore.toDate();
가장 좋은 방법은 SimpleDateFormat객체를 사용하는 것입니다.
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = "2014-02-11";
Date dateObject = sdf.parse(dateString); // Handle the ParseException here
Java8에서 :
import java.time.Instant;
import java.util.Date;
Date date = Date.from(Instant.parse("2000-01-01T00:00:00.000Z"))
이 시도
Calendar cal = Calendar.getInstance();
Date todayDate = new Date();
cal.setTime(todayDate);
// Set time fields to zero
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
todayDate = cal.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.ENGLISH);
//format as u want
try {
String dateStart = "June 14 2018 16:02:37";
cal.setTime(sdf.parse(dateStart));
//all done
} catch (ParseException e) {
e.printStackTrace();
}
import java.io.*;
import java.util.*;
import java.util.HashMap;
public class Solution
{
public static void main(String[] args)
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"SUNDAY");
hm.put(2,"MONDAY");
hm.put(3,"TUESDAY");
hm.put(4,"WEDNESDAY");
hm.put(5,"THURSDAY");
hm.put(6,"FRIDAY");
hm.put(7,"SATURDAY");
Scanner in = new Scanner(System.in);
String month = in.next();
String day = in.next();
String year = in.next();
String format = year + "/" + month + "/" + day;
Date date = null;
try
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
date = formatter.parse(format);
}
catch(Exception e){
}
Calendar c = Calendar.getInstance();
c.setTime(date);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
System.out.println(hm.get(dayOfWeek));
}
}
나는 당신의 날짜가 PHP에서 왔으며 html (dom) 또는? 모든 날짜와 타임 스탬프를 준비하는 PHP 기능이 있습니다. 이것은 필요한 포메이션을 반환합니다.
$timeForJS = timeop($datetimeFromDatabase['payedon'], 'js', 'local'); // save 10/12/2016 09:20 on var
이 형식은 js에서 새 날짜를 만드는 데 사용할 수 있습니다.
<html>
<span id="test" data-date="<?php echo $timeForJS; ?>"></span>
<script>var myDate = new Date( $('#test').attr('data-date') );</script>
</html>
내가 말할 것은, 당신의 삶을 더 편하게 만드는 자신 만의 기능을 감싸는 것입니다. 내 func를 샘플로 사용할 수 있지만 내 cms에 포함되어 있으므로 1 대 1 복사하여 붙여 넣을 수 없습니다. :)
function timeop($utcTime, $for, $tz_output = 'system')
{
// echo "<br>Current time ( UTC ): ".$wwm->timeop('now', 'db', 'system');
// echo "<br>Current time (USER): ".$wwm->timeop('now', 'db', 'local');
// echo "<br>Current time (USER): ".$wwm->timeop('now', 'D d M Y H:i:s', 'local');
// echo "<br>Current time with user lang (USER): ".$wwm->timeop('now', 'datetimes', 'local');
// echo '<br><br>Calculator test is users timezone difference != 0! Tested with "2014-06-27 07:46:09"<br>';
// echo "<br>Old time (USER -> UTC): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'system');
// echo "<br>Old time (UTC -> USER): ".$wwm->timeop('2014-06-27 07:46:09', 'db', 'local');
/** -- */
// echo '<br><br>a Time from db if same with user time?<br>';
// echo "<br>db-time (2019-06-27 07:46:09) time left = ".$wwm->timeleft('2019-06-27 07:46:09', 'max');
// echo "<br>db-time (2014-06-27 07:46:09) time left = ".$wwm->timeleft('2014-06-27 07:46:09', 'max', 'txt');
/** -- */
// echo '<br><br>Calculator test with other formats<br>';
// echo "<br>2014/06/27 07:46:09: ".$wwm->ntimeop('2014/06/27 07:46:09', 'db', 'system');
switch($tz_output){
case 'system':
$tz = 'UTC';
break;
case 'local':
$tz = $_SESSION['wwm']['sett']['tz'];
break;
default:
$tz = $tz_output;
break;
}
$date = new DateTime($utcTime, new DateTimeZone($tz));
if( $tz != 'UTC' ) // Only time converted into different time zone
{
// now check at first the difference in seconds
$offset = $this->tz_offset($tz);
if( $offset != 0 ){
$calc = ( $offset >= 0 ) ? 'add' : 'sub';
// $calc = ( ($_SESSION['wwm']['sett']['tzdiff'] >= 0 AND $tz_output == 'user') OR ($_SESSION['wwm']['sett']['tzdiff'] <= 0 AND $tz_output == 'local') ) ? 'sub' : 'add';
$offset = ['math' => $calc, 'diff' => abs($offset)];
$date->$offset['math']( new DateInterval('PT'.$offset['diff'].'S') ); // php >= 5.3 use add() or sub()
}
}
// create a individual output
switch( $for ){
case 'js':
$format = 'm/d/Y H:i'; // Timepicker use only this format m/d/Y H:i without seconds // Sett automatical seconds default to 00
break;
case 'js:s':
$format = 'm/d/Y H:i:s'; // Timepicker use only this format m/d/Y H:i:s with Seconds
break;
case 'db':
$format = 'Y-m-d H:i:s'; // Database use only this format Y-m-d H:i:s
break;
case 'date':
case 'datetime':
case 'datetimes':
$format = wwmSystem::$languages[$_SESSION['wwm']['sett']['isolang']][$for.'_format']; // language spezific output
break;
default:
$format = $for;
break;
}
$output = $date->format( $format );
/** Replacement
*
* D = day short name
* l = day long name
* F = month long name
* M = month short name
*/
$output = str_replace([
$date->format('D'),
$date->format('l'),
$date->format('F'),
$date->format('M')
],[
$this->trans('date', $date->format('D')),
$this->trans('date', $date->format('l')),
$this->trans('date', $date->format('F')),
$this->trans('date', $date->format('M'))
], $output);
return $output; // $output->getTimestamp();
}
참고 URL : https://stackoverflow.com/questions/22326339/how-create-date-object-with-values-in-java
'IT TIP' 카테고리의 다른 글
| GSON은 왜 getter / setter가 아닌 필드를 사용합니까? (0) | 2020.10.29 |
|---|---|
| data.table 열에서 텍스트 문자열 분할 (0) | 2020.10.29 |
| printf를 사용하여 BASH의 문자에 대한 정수 ASCII 값 (0) | 2020.10.29 |
| 실행 파일이 유효하지 않은 권한으로 서명되었습니다. (0) | 2020.10.29 |
| ASP.NET 라우팅을 사용하여 정적 파일 제공 (0) | 2020.10.29 |


