는java.util.날짜toString()
에서 날짜를 표시합니다 현지 시간대에 있습니다.
거기에 몇 가지 일반적인 시나리오를 우리가 원하는 데이터로 인쇄된 것UTC로그를 포함하여,데이터 수출 및 통신을 외부 프로그램입니다.
무엇's 를 만드는 가장 좋은 방법은 문자열 표현의java.util.날짜
UTC?
교체하는 방법 j.u.날짜toString()
형식으로,아't 정렬(감사합니다,@JonSkeet!) 더 나은 형식으로?
내가 생각하는 표준 방식의 인쇄일에 사용자 정의 형식과 시간 영역은 매우 지루한:
final Date date = new Date();
final String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz";
final SimpleDateFormat sdf = new SimpleDateFormat(ISO_FORMAT);
final TimeZone utc = TimeZone.getTimeZone("UTC");
sdf.setTimeZone(utc);
System.out.println(sdf.format(date));
내가 찾는 한-라이너는 다음과 같:
System.out.println(prettyPrint(date, "yyyy-MM-dd'T'HH:mm:ss.SSS zzz", "UTC"));
Java8 고 나중에 우리는 새로운java.시간 패키지장에서(Tutorial). 에서 영감을 Joda 간에 의해 정의된 JSR310,그리고 확장에 의해ThreeTen-추가프로젝트입니다.
최고의 솔루션을종류의 날짜간 객체가 아닌 문자열. 하지만 작업해야 하는 경우에는 문자열을 읽는다.
는즉시
순간을 나타냅 타임라인에서는 기본적으로UTC(참조하십시오 클래스 doc 에 대한 정확한 정보). 은toString
구현을 사용하여DateTimeFormatter.ISO_INSTANT
형식으로 기본적으로 합니다. 이 형식을 포함한 zero,세 가지,육 또는 나인 자리 숫자로 표시하는 데 필요한 분수의 두 번째 까지나노초정밀도입니다.
String output = Instant.now().toString(); // Example: '2015-12-03T10:15:30.120Z'
해야 하는 경우에는 상호 운용과 오래된 날짜클래스고,변환기/에서 java.시간을 통해 새로운 방법을 추가하는 오래된 클래스입니다. 예제:
날짜::toInstant`.
myJavaUtilDate.toInstant().toString()
사용할 수 있는 다른 포맷이 필요한 경우 일관된 수의 숫자에서 소수 두 번째는 필요한 경우 없이 분수 두 번째입니다.
또 다른 경로를 잘라내려면 두 번째의 분수를 사용하는 것ZonedDateTime
대신에즉시
부르고,그방법을 변경한 부분을 제로.
참고 해야 합니다 우리는 표준 시간대를 지정한ZonedDateTime
(따라서 이름). 우리의 경우에는 즉 UTC. 서브 클래스의ZoneID
,ZoneOffset
,을 보유하고 편리한정 UTC. 만약 우리가 생략 시간대,JVM 의현재 기본 표준 시간대는 암시적으로 적용됩니다.
String output = ZonedDateTime.now( ZoneOffset.UTC ).withNano( 0 ).toString(); // Example: 2015-08-27T19:28:58Z
업데이트:이 Joda 간 프로젝트는 지금 유지 관리 모드에서는,팀과 함께 자문 마이그레이션 java.시간 클래스입니다.
을 찾고 있었는 한-라이너
쉬운 사용하는 경우Joda 간2.3 라이브러리입니다. ISO8601이 기본값이 서식한다.
아래의 예제 코드에서는 내가 지정하는 표준 시간대 보다는 오히려에 따라서 기본 표준 시간대. 이 경우에,나는'm 을 지정하는UTC당신의 질문입니다. Z
끝에,음성 as"Zulu",의미 없는 시간대 offset from UTC.
// import org.joda.time.*;
String output = new DateTime( DateTimeZone.UTC );
출력...
2013-12-12T18:29:50.588Z
다음과 같은 유용한 의견이 나는've 완전히 다시 작성일 포맷. 용어:
-짧은(하이너) -타 처분할 수 있는 물체(시간대,형식)문자열로 -지원한 유용한 정렬 ISO 형식과 기존의 형식으로부터 상자
고려하는 경우 이 코드는,유용할 수 있 게시 원본 및 항아리에 있습니다.
// The problem - not UTC
Date.toString()
"Tue Jul 03 14:54:24 IDT 2012"
// ISO format, now
PrettyDate.now()
"2012-07-03T11:54:24.256 UTC"
// ISO format, specific date
PrettyDate.toString(new Date())
"2012-07-03T11:54:24.256 UTC"
// Legacy format, specific date
PrettyDate.toLegacyString(new Date())
"Tue Jul 03 11:54:24 UTC 2012"
// ISO, specific date and time zone
PrettyDate.toString(moonLandingDate, "yyyy-MM-dd hh:mm:ss zzz", "CST")
"1969-07-20 03:17:40 CDT"
// Specific format and date
PrettyDate.toString(moonLandingDate, "yyyy-MM-dd")
"1969-07-20"
// ISO, specific date
PrettyDate.toString(moonLandingDate)
"1969-07-20T20:17:40.234 UTC"
// Legacy, specific date
PrettyDate.toLegacyString(moonLandingDate)
"Wed Jul 20 08:17:40 UTC 1969"
(이 코드를 수 있는 방법이 될 수 있습니다질문에 코드를 검토 stackexchange)
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* Formats dates to sortable UTC strings in compliance with ISO-8601.
*
* @author Adam Matan <[email protected]>
* @see http://stackoverflow.com/questions/11294307/convert-java-date-to-utc-string/11294308
*/
public class PrettyDate {
public static String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz";
public static String LEGACY_FORMAT = "EEE MMM dd hh:mm:ss zzz yyyy";
private static final TimeZone utc = TimeZone.getTimeZone("UTC");
private static final SimpleDateFormat legacyFormatter = new SimpleDateFormat(LEGACY_FORMAT);
private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT);
static {
legacyFormatter.setTimeZone(utc);
isoFormatter.setTimeZone(utc);
}
/**
* Formats the current time in a sortable ISO-8601 UTC format.
*
* @return Current time in ISO-8601 format, e.g. :
* "2012-07-03T07:59:09.206 UTC"
*/
public static String now() {
return PrettyDate.toString(new Date());
}
/**
* Formats a given date in a sortable ISO-8601 UTC format.
*
* <pre>
* <code>
* final Calendar moonLandingCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
* moonLandingCalendar.set(1969, 7, 20, 20, 18, 0);
* final Date moonLandingDate = moonLandingCalendar.getTime();
* System.out.println("UTCDate.toString moon: " + PrettyDate.toString(moonLandingDate));
* >>> UTCDate.toString moon: 1969-08-20T20:18:00.209 UTC
* </code>
* </pre>
*
* @param date
* Valid Date object.
* @return The given date in ISO-8601 format.
*
*/
public static String toString(final Date date) {
return isoFormatter.format(date);
}
/**
* Formats a given date in the standard Java Date.toString(), using UTC
* instead of locale time zone.
*
* <pre>
* <code>
* System.out.println(UTCDate.toLegacyString(new Date()));
* >>> "Tue Jul 03 07:33:57 UTC 2012"
* </code>
* </pre>
*
* @param date
* Valid Date object.
* @return The given date in Legacy Date.toString() format, e.g.
* "Tue Jul 03 09:34:17 IDT 2012"
*/
public static String toLegacyString(final Date date) {
return legacyFormatter.format(date);
}
/**
* Formats a date in any given format at UTC.
*
* <pre>
* <code>
* final Calendar moonLandingCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
* moonLandingCalendar.set(1969, 7, 20, 20, 17, 40);
* final Date moonLandingDate = moonLandingCalendar.getTime();
* PrettyDate.toString(moonLandingDate, "yyyy-MM-dd")
* >>> "1969-08-20"
* </code>
* </pre>
*
*
* @param date
* Valid Date object.
* @param format
* String representation of the format, e.g. "yyyy-MM-dd"
* @return The given date formatted in the given format.
*/
public static String toString(final Date date, final String format) {
return toString(date, format, "UTC");
}
/**
* Formats a date at any given format String, at any given Timezone String.
*
*
* @param date
* Valid Date object
* @param format
* String representation of the format, e.g. "yyyy-MM-dd HH:mm"
* @param timezone
* String representation of the time zone, e.g. "CST"
* @return The formatted date in the given time zone.
*/
public static String toString(final Date date, final String format, final String timezone) {
final TimeZone tz = TimeZone.getTimeZone(timezone);
final SimpleDateFormat formatter = new SimpleDateFormat(format);
formatter.setTimeZone(tz);
return formatter.format(date);
}
}
다음과 같은 간단한 코드를 기반으로,허용되는 답변 위의,나를 위해 일했:
public class GetSync {
public static String ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS zzz";
private static final TimeZone utc = TimeZone.getTimeZone("UTC");
private static final SimpleDateFormat isoFormatter = new SimpleDateFormat(ISO_FORMAT);
static {
isoFormatter.setTimeZone(utc);
}
public static String now() {
return isoFormatter.format(new Date()).toString();
}
}
이 도움이 되었으면 좋겠습니다 누군가 있습니다.
사용즉시
의`java.니다.
System.out.println(Instant.now());
이것은 단지 인쇄:
2018-01-27T09:35:23.179612Z
인스턴트입니다.toString
상 UTC 시간입니다.
출력일반적으로정렬할 수 있지만,불행한 예외가 있습니다.toString
당신에게 충분한 그룹의 세수를 렌더링하는 정밀도 그것을 보유하고 있습니다. Java9Mac 에서의 정밀도인스턴트입니다.지금()
될 것으로 보인 마이크로초 단위로,그러나 우리는 기대에서 약 한 경우의 천이 치수의 밀리초 및 인쇄에만 세 소수. 문자열과 함께 불평등 숫자의 소수가 될 것입니다 잘못된 순서로 정렬(당신이 쓰지 않는 한 사용자 지정 비교 측정기이 계정).
인스턴트
는 하나의 클래스 java.시간,현대 Java 날짜 및 시간 API,는 따뜻하게 추천 사용하는 대신의 오래된 날짜
클래스입니다.java.시간`로 건설 Java8 이상으로 사용되었으며 백포트 Java6and7.