현재 순간 (UTC)의 ISO 8601 형식 프레젠테이션 을 얻는 가장 우아한 방법은 무엇입니까 ? 다음과 같아야합니다 2010-10-12T08:50Z
..
예:
String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
답변
원하는 객체 SimpleDateFormat
를 포맷하는 데 사용하십시오 Date
.
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
사용 a new Date()
상술 한 바와 같이하여 현재 시간을 포맷한다.
답변
기본 시간대가 UTC가 아닌 시스템의 경우 :
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
SimpleDateFormat
인스턴스가 자주 필요한 경우 글로벌 상수로 선언하지만,이 클래스는 스레드 안전하지 않습니다 것을주의 할 수있다. 여러 스레드가 동시에 액세스하는 경우 동기화되어야합니다.
편집 : 많은 다른 시간 / 날짜 조작을 수행하는 경우 Joda Time을 선호합니다 …
EDIT2 : 수정 : setTimeZone
문자열을 수락하지 않습니다 (Paul에 의해 수정 됨)
답변
자바 8 네이티브
java.time 은 Java 8부터 간단합니다. 그리고 스레드 안전합니다.
ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )
결과: 2015-04-14T11:07:36.639Z
당신은 가벼운 사용하도록 유혹 할 수
Temporal
와 같은Instant
나LocalDateTime
,하지만 그들은 지원 또는 시간 영역 데이터 포맷이 부족하다. 기본적으로 만ZonedDateTime
작동합니다.
ZonedDateTime 및 DateTimeFormatter 옵션 / 작업을 조정하거나 연결하여 시간대 와 정밀도 를 어느 정도 쉽게 제어 할 수 있습니다 .
ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
.truncatedTo( ChronoUnit.MINUTES )
.format( DateTimeFormatter.ISO_DATE_TIME )
결과: 2015-04-14T11:07:00+01:00[Europe/Paris]
초 부분 제거와 같은 개선 된 요구 사항은 여전히 사용자 지정 형식 또는 사용자 지정 사후 프로세스를 통해 제공되어야합니다.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07
Java 6 & 7의 경우 Android 포트 가있는 ThreeTen-Backport 와 같은 java.time 의 백 포트를 고려할 수 있습니다 . 둘 다 Joda보다 가볍고 Joda의 경험 -esp에서 배웠습니다 . java.time이 Joda의 저자에 의해 설계되었다는 것을 고려하십시오.
답변
자바 8 :
thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
.withZone(ZoneOffset.UTC)
.format(Instant.now());
프리 자바 8 :
thisMoment = String.format("%tFT%<tRZ",
Calendar.getInstance(TimeZone.getTimeZone("Z")));
에서 워드 프로세서 :
'R'
24 시간 제로 “% tH : % tM”으로 형식화 된 시간
'F'
ISO 8601 완료 날짜는 “% tY- % tm- % td”로 형식화되었습니다.
답변
Java 8부터 간단하게 수행 할 수 있습니다.
Instant.now().toString();
로부터 java.time.Instant
문서 :
public static Instant now()
시스템 시계에서 현재 순간을 얻습니다.
현재 UTC 를 얻기 위해 시스템 UTC 시계 를 쿼리합니다 .
public String toString()
ISO-8601 표현을 사용한이 순간의 문자열 표현.
사용 된 형식은와 동일합니다
DateTimeFormatter.ISO_INSTANT
.
답변
JodaTime 사용
ISO 8601 캘린더 시스템은 Joda-Time의 기본 구현입니다.
JodaTime Formatter에 대한 문서는 다음과 같습니다.
편집하다:
추가하고 싶지 않거나 위의 라이브러리 추가 가치가 표시되지 않으면 내장 SimpleDateFormat
클래스에서 날짜를 필수 ISO 형식으로 형식화 할 수 있습니다
@Joachim Sauer가 제안한대로
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());