ISO 8601 형식으로 날짜, 시간 및 분을 사용하여 현재 모멘트를 얻는 방법은 무엇입니까?
현재 ISO 8601 형식의 프레젠테이션(UTC)을 얻는 가장 우아한 방법은 무엇입니까?다음과 같이 표시됩니다.2010-10-12T08:50Z
.
예:
String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(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());
「」의 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
는 필요에 따라 될 수 이 세이프가 아닙니다.이 클래스는 스레드세이프가 .여러 스레드에서 동시에 액세스할 경우 동기화해야 합니다.
조다 시간: 조다 시간
완료: EDIT2: " 정 edit완 edit":setTimeZone
는 String(Paul에됨)을.
Java 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]
seconds 부분을 삭제하는 등 세부 요건은 커스텀 포맷 또는 커스텀 포스트 프로세스에서 충족시켜야 합니다.
.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의 경험에서 배웠다 - java.time이 Joda의 저자에 의해 디자인된 것을 고려하면.
Java 8에서는 다음 작업을 간단하게 수행할 수 있습니다.
Instant.now().toString();
문서에서:
지금이다
public static Instant now()
시스템 클럭에서 현재 순간을 가져옵니다.
그러면 현재 순간을 얻기 위해 시스템 UTC 클럭이 쿼리됩니다.
문자열
public String toString()
ISO-8601 표현을 사용한 이 순간의 문자열 표현.
사용되는 형식은 와 동일합니다.
Java 8:
thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
.withZone(ZoneOffset.UTC)
.format(Instant.now());
Java 8 이전 버전:
thisMoment = String.format("%tFT%<tRZ",
Calendar.getInstance(TimeZone.getTimeZone("Z")));
문서에서:
'R'
"%24로 포맷된 :%tH:%tM"
'F'
ISO 8601은 "%tY-%tm-%td"입니다.
Joda Time 사용
ISO 8601 캘린더 시스템은 Joda-Time 내의 기본 구현입니다.
Joda Time Formatter 문서입니다.
편집:
위의 않는 에는 빌트 인을 .SimpleDateFormat
to ISO 짜 class 。
@Joachim Sauer의 제안대로
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());
Apache의 DateFormatUtilscommons-lang3
한 상수가 have 음 、 음 、 have 、 have 、 have 、 have have have have have have have have 。DateFormatUtils.ISO_DATETIME_FORMAT
Jodatime을 포함하지 않는 경우(좋은 만큼)
javax.xml.bind.DatatypeConverter.printDateTime(
Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);
다음 문자열이 반환됩니다.
2012-07-10T16:02:48.440Z
원래 요청과는 약간 다르지만 여전히 ISO-8601입니다.
ISO 8601은 초수를 포함할 수 있습니다.http://en.wikipedia.org/wiki/ISO_8601#Times
암호는
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
dr;dr
다른 답변 중 일부는 java.time 클래스를 권장할 때 올바르지만 특정 요구에 따라 불필요한 길이를 사용합니다.
Instant.now() // Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds.
.truncatedTo( ChronoUnit.MINUTES ) // Lop off any seconds or fractional second, to get a value in whole minutes.
.toString() // Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.
2018-01-23T12:34Z
Instant::toString
jav.time.Instant
UTC UTC 의 UTC 클래스입니다.UTC에 의한 것입니다.
Instant instant = Instant.now() ;
instant.toString(): 2018-01-23T12:34:56.123456Z
Z
문자열의 " " " 입니다.2010-10-12T08:50Z
는 "Zulu"로 발음되며 UTC를 의미합니다.
원하는 형식이 ISO 8601 표준을 준수합니다.java.time 클래스는 문자열을 해석/생성할 때 기본적으로 이러한 표준 형식을 사용합니다.따라서 포맷 패턴을 지정할 필요가 없습니다.위와 같이 전화하세요.
특히 1초 또는 분수초 없이 정분을 원하는 경우 잘라냅니다.를 지정합니다.ChronoUnit
를 누릅니다
Instant instant = Instant.now().truncatedTo( ChronoUnit.MINUTES ) ;
String output = instant.toString(); // Generate a `String` object in standard ISO 8601 format.
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
②.
java.time 클래스는 어디서 얻을 수 있습니까?
- Java SE 8, Java SE 9, Java SE 10 이후
- 붙박이.
- 번들 구현이 포함된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되어 있습니다.
- 자바 SE 6 및 자바 SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 쓰리텐ABP 프로젝트가 ThreeTen-Backport(상기)를 채택하고 있습니다.'쓰리텐ABP 사용방법'을 참조하십시오.
쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 등 유용한 클래스가 있습니다.
조다 타임
업데이트: Joda-Time 프로젝트는 유지보수 모드로 전환되었으며 팀은 java.time 클래스로의 이행을 권고하고 있습니다.Java 6 및 7에 대해서는 쓰리텐ABP 프로젝트에서 Android용으로 수정된 ThreeTen 백포트 프로젝트를 참조하십시오.
Joda-Time 라이브러리 사용...
String output = new DateTime( DateTimeZone.UTC ).toString() ;
이것은 나사산 안전합니다.Joda-Time은 기존 개체를 변경하는 대신 새로운 불변의 개체를 생성합니다.
초수를 지정하지 않고 포맷을 요구할 경우 분 단위로 해결하려면 Joda-Time에 내장된 다른 많은 포맷 중 하나를 사용하십시오.
DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;
java.time
Java 8 이상에서는 Joda-Time이 계속 작동합니다.그러나 내장된 java.time 프레임워크는 Joda-Time을 대체합니다.따라서 편리한 대로 코드를 Joda-Time에서 java.time으로 마이그레이션하십시오.
최신 솔루션에 대해서는 다른 답변을 참조하십시오.
java.time 정보
java.time 프레임워크는 Java 8 이후에 포함되어 있습니다.이러한 클래스는 , 및 등 문제가 많은 오래된 레거시 날짜 시간 클래스를 대체합니다.
현재 유지보수 모드에 있는 조다 타임 프로젝트는 java.time 클래스로의 이행을 권장합니다.
자세한 내용은 Oracle 자습서를 참조하십시오.또한 Stack Overflow를 검색하여 많은 예와 설명을 확인하십시오.사양은 JSR 310입니다.
java.time 객체를 데이터베이스와 직접 교환할 수 있습니다.JDBC 4.2 이후에 준거한JDBC 드라이버를 사용합니다.스트링도 필요 없고java.sql.*
②.
java.time 클래스는 어디서 얻을 수 있습니까?
- 자바 SE 8, 자바 SE 9, 자바 SE 10 이후
- 붙박이.
- 번들 구현이 포함된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되어 있습니다.
- 자바 SE 6 및 자바 SE 7
- java.time 기능의 대부분은 ThreeTen 백포트의 Java 6 및7로 백포트됩니다.
- 안드로이드
- 최신 버전의 Android 번들 구현 java.time 클래스.
- 이전의 Android(<26)에서는 쓰리텐ABP 프로젝트가 ThreeTen-Backport(상기)를 채택하고 있습니다.'쓰리텐ABP 사용방법'을 참조하십시오.
쓰리텐 엑스트라 프로젝트는 java.time을 추가 클래스로 확장합니다.이 프로젝트는 향후 java.time에 추가될 수 있는 가능성을 입증하는 기반입니다.여기에는 , , , 등 유용한 클래스가 있습니다.
Java 버전7의 경우
Oracle 매뉴얼은 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html에 따릅니다.
X - ISO 8601 표준 시간대에 사용됩니다.
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
System.out.println(nowAsISO);
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);
System.out.println(finalResult);
가장 쉬운 방법은 먼저 인스턴트 모드로 이동한 후 다음과 같이 스트링을 수행하는 것이라고 생각합니다.
String d = new Date().toInstant().toString();
그 결과, 다음과 같은 결과가 됩니다.
2017-09-08T12:56:45.331Z
ISO 8601의 경우 Java의 SimpleDateFormat을 다음 패턴과 함께 사용할 수 있습니다.
샘플 코드: (사용 가능한 모든 시간대에 대해 목록 표시)
for (String timeZone : TimeZone.getAvailableIDs())
{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
String formatted = dateFormat.format(new Date());
System.out.print(formatted);
if (formatted.endsWith("Z"))
{
// These time zone's have offset of '0' from GMT.
System.out.print("\t(" + timeZone + ")");
}
System.out.println();
}
다음을 사용할 수 있습니다.
TimeZone.getDefault()
기본 VM 표준 시간대로 설정합니다.자세한 것은 이쪽
는 몇 .이는 몇 개 안 되는데, 이 시간대에 안 됩니다.'Z'
에는 오프셋이 '0'
GMT gm gm 。
자세한 내용은 여기를 참조하십시오.
private static String getCurrentDateIso()
{
// Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat.format(new Date());
}
여기에서는 "now()"를 호출하는 것이 더 이상 필요한 작업을 수행하지 않도록 최적화된 전체 클래스를 보여 줍니다.
public class Iso8601Util
{
private static TimeZone tz = TimeZone.getTimeZone("UTC");
private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
static
{
df.setTimeZone(tz);
}
public static String now()
{
return df.format(new Date());
}
}
DateTimeFormatter.ISO_DATE_TIME
.withZone(ZoneOffset.UTC)
.format(yourDateObject.toInstant())
단, joda-time은 확장 형식(2015-12-09T00:22:42.930Z)만 지원합니다.기본 형식(20151209T002242.930Z)은 지원되지 않습니다.java SimpleDateFormat으로 포맷 목록을 테스트하는 것이 더 나을 수 있습니다.
안드로이드에서 캘린더와 SimpleDateFormat으로 했습니다.다음 메서드는 "GMT" 타임존(이것이 유니버설타임존)을 포함한 캘린더를 반환합니다.그런 다음 Calendar 클래스를 사용하여 Calendar 클래스의 setTimeZone() 메서드를 사용하여 다른 시간대 간의 시간을 설정할 수 있습니다.
private static final String GMT = "GMT";
private static final String DATE_FORMAT_ISO = "yyyyMMdd'T'HHmmss";
public static Calendar isoToCalendar(final String inputDate) {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(GMT));
try {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_ISO, Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
Date date = dateFormat.parse(inputDate);
calendar.setTime(date);
} catch (ParseException e) {
Log.e("TAG",e.getMessage());
}
return calendar;
}
주의:날짜 클래스가 TimeZone 존재를 인식하지 못합니다.따라서 1개의 날짜를 디버깅하면 항상 현재 시간대의 날짜가 표시됩니다.
퍼포먼스를 중시한다면 ISO8601 형식의 날짜 조작에 있어서 표준 Java 파서와 포메터를 능가하는 라이브러리를 만들었습니다.Datetime Processor 구현은 스레드 세이프이며 동시 맵 또는 정적 필드에 캐시할 수 있습니다.
<dependency>
<groupId>com.axibase</groupId>
<artifactId>date-processor</artifactId>
<version>1.0.3</version>
</dependency>
import com.axibase.date.DatetimeProcessor;
import com.axibase.date.PatternResolver;
import org.junit.Before;
import org.junit.Test;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public class DateFormatTest {
private Clock clock;
@Before
public void prepare() {
clock = Clock.fixed(Instant.ofEpochMilli(1571285405300L), ZoneId.of("Europe/Berlin"));
}
@Test
public void testIsoMillis(){
final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10:05.300Z"));
}
@Test
public void testIsoMillisLocalZone(){
final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
assertThat(formatter.print(clock.millis(), clock.getZone()), is("2019-10-17T06:10:05.300+02:00"));
}
@Test
public void testIsoMinutes(){
final DatetimeProcessor formatter = PatternResolver.createNewFormatter("yyyy-MM-ddTHH:mmXXX");
assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10Z"));
}
}
Date에서 Instant로 가는 간단한 방법, 그리고 Date에서 Instant로 가는 방법을 추가했어야 합니다.toISO8601
그게 바로 많은 사람들이 찾고 있는 것입니다.java.util에서 다른 답변에 대한 보충 자료로 사용됩니다.ISO 8601 형식 날짜:
Instant.ofEpochMilli(date.getTime()).toString();
을 사용할 는 잘 않지만, 자동완성을 사용할 때는 잘 보이지 않습니다.java.time.Instant.toString()
ISO-8601을 사용한 이 순간의 문자열 표현
Joda Time을 사용하시는 분들을 위해 yyy-MM-dd'T' 형식의 원라이너를 준비했습니다.HH:mm:ss'Z'
DateTime(timeInMillis, DateTimeZone.UTC).toString(ISODateTimeFormat.dateTimeNoMillis())
이것을 시험해 보세요.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
String date=sdf.format (new Date() );
ISO 8601 형식용
언급URL : https://stackoverflow.com/questions/3914404/how-to-get-current-moment-in-iso-8601-format-with-date-hour-and-minute
'programing' 카테고리의 다른 글
Spring Cache @Cacheable - 같은 빈의 다른 메서드에서 호출 중 작동하지 않음 (0) | 2022.07.21 |
---|---|
최적의 Java 이미지 처리 라이브러리/접근법은 무엇입니까? (0) | 2022.07.21 |
"calloc"의 첫 번째 "c"는 무엇을 의미합니까? (0) | 2022.07.21 |
Vuetify가 기본 CSS를 덮어쓰지 않도록 하는 방법 (0) | 2022.07.21 |
Vuex(변이를 커밋하지 않는 함수)의 상태에 대해 알아보기 위한 베스트 프랙티스 (0) | 2022.07.21 |