답변:
Date
인수없이 새로운 객체를 만들면됩니다. 현재 날짜와 시간이 새 개체에 할당됩니다.
import java.util.Date;
Date d = new Date();
의 말에 javadoc의 에 대한 제로 인수 생성자 :
Date 객체 를 할당 하고 가장 가까운 밀리 초 단위로 측정 된 시간을 나타내도록 초기화합니다 .
확인 당신이 사용하고 java.util.Date
이 아니라 java.sql.Date
전혀 다른 대화의 주제입니다 다소 다른 의미를, 후자는 제로 인수 생성자를 가지고 있지 않으며,이 -. :)
많은 사람들은 Java Date 및 Calendar 클래스를 제대로 설계하지 않은 것으로 간주합니다. Java 내장 날짜 라이브러리 대신 일반적으로 사용되는 라이브러리 인 Joda Time을 살펴보십시오 .
DateTime.Now
Joda Time 과 동등한 기능은 다음과 같습니다 .
DateTime dt = new DateTime();
최신 정보
의견에서 언급했듯이 Joda Time의 최신 버전에는 다음과 같은 DateTime.now()
방법이 있습니다.
DateTime dt = DateTime.now();
Instant.now()
java.util.Date 클래스는 Java 8 이상의 새로운 java.time 패키지 ( Tutorial )에 의해 수정되었습니다 . 오래된 java.util.Date/.Calendar 클래스는 매우 번거롭고 혼란스럽고 결함이 있습니다. 피하십시오.
ZonedDateTime
java.time에서 현재 순간을 가져옵니다.
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime
캡슐화 :
시간대를 지정하지 않으면 JVM의 현재 기본 시간대가 자동으로 지정됩니다. 기본적으로 암시 적으로 의존하는 것보다 원하는 / 예상 시간대를 지정하는 것이 좋습니다.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
일반적으로 UTC 로 백엔드 작업 (비즈니스 로직, 데이터베이스, 스토리지, 데이터 교환)을하는 습관을들이는 것이 좋습니다. 시간대 . 위의 코드는 JVM의 현재 기본 시간대에 암시 적으로 의존합니다.
Instant
클래스는 나노초의 해상도를 가진 UTC의 타임 라인에서 잠시 시간을 나타냅니다.
Instant instant = Instant.now();
이 Instant
클래스는 java.time의 기본 빌딩 블록 클래스이며 코드에서 자주 사용될 수 있습니다.
보다 유연한 형식 지정이 필요하면로 변환하십시오 OffsetDateTime
. ZoneOffset
객체를 지정하십시오 . UTC의 경우 편리한 상수 상수를 사용하십시오 .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
사용자에게 표시 할 다른 시간대로 쉽게 조정할 수 있습니다. 용도 적절한 시간대 이름을 , 결코 같은 3-4 문자 코드 EST
나 IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
현지화 된 해당 날짜-시간 값의 문자열 표현을 생성하십시오.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
또는 UTC를 유지하려면을 사용하십시오 Instant
. Instant
객체는 항상 UTC에, 나노초 해상도로, 타임 라인에 잠시 시간을 나타냅니다. 이는 시간대 지정과 함께 시간 대별 날짜-시간의 빌딩 블록을 제공합니다. 개념적으로 다음과 같이 생각할 수 있습니다.
당신은 추출 할 수 있습니다 Instant
A로부터를 ZonedDateTime
.
Instant instantNow = zdt.toInstant();
인스턴트로 시작할 수 있습니다. Instant
항상 UTC 와 같이 시간대를 지정할 필요가 없습니다 .
Instant now = Instant.now();
Calendar 객체를 선호합니다.
Calendar now = GregorianCalendar.getInstance()
작업하기가 훨씬 쉽다는 것을 알았습니다. 달력에서 Date 객체를 가져올 수도 있습니다.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
Java는 항상 날짜 및 시간 사용 사례를 부적절하게 지원했습니다. 예를 들어, 기존 클래스 (예 : java.util.Date
및 SimpleDateFormatter
)는 스레드로부터 안전하지 않으므로 동시성 문제가 발생할 수 있습니다. 또한 API에는 특정 결함이 있습니다. 예를 들어 연도는 java.util.Date
1900 에서 시작하고 월은 1에서 시작하고 일은 0에서 시작합니다. 이러한 문제로 인해와 같은 타사 날짜 및 시간 라이브러리가 인기를 얻었습니다 Joda-Time
. 새로운 날짜 및 시간을 해결하기 위해 API는 Java SE 8 용으로 설계되었습니다.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
당으로 문서 :
이 메서드
now()
는 시스템 시계와 기본 시간대 (null 아님)를 사용하여 현재 날짜-시간을 반환합니다 . 기본 시간대의 시스템 시계에서 현재 날짜-시간을 가져옵니다. 현재 시간대를 기본 시간대로 쿼리하여 현재 날짜-시간을 얻습니다. 이 방법을 사용하면 시계가 하드 코딩되어 있기 때문에 테스트를 위해 대체 시계를 사용할 수 없습니다.