Java에서 현재 날짜와 시간을 얻으려면 어떻게합니까?
DateTime.Now
C # 과 동등한 것을 찾고 있습니다.
답변
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();
답변
tl; dr
Instant.now()
java.time
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
일반적으로 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