ISO 8601
Date and time in UTC
2020-06-05T02:50:21+00:00
2020-06-05T02:50:21Z
20200605T025021Z
week
2020-W23
week with weekday
2020-W23-5
Epoch
Linux timestamp 라고도 불린다.
epoch 는 현재 순간에서 모든 Timezone 에서 모두 같은 값 이다.
간단한 단위 테스트 코드를 작성해서 테스트 해보자.
val utc = ZonedDateTime.now(ZoneOffset.UTC)
val kst = ZonedDateTime.now(ZoneOffset.ofHours(+9))
val ca = ZonedDateTime.now(ZoneOffset.ofHours(-8))
val systemMil = System.currentTimeMillis() / 1000L
val utcMil = utc.toInstant().toEpochMilli() / 1000L
val kstMil = kst.toInstant().toEpochMilli() / 1000L
val caMil = ca.toInstant().toEpochMilli() / 1000L
assertEquals(systemMil, utcMil)
assertEquals(systemMil, kstMil)
assertEquals(systemMil, caMil)
println(utc.format(DateTimeFormatter.ISO_DATE_TIME))
println(kst.format(DateTimeFormatter.ISO_DATE_TIME))
println(ca.format(DateTimeFormatter.ISO_DATE_TIME))
println(systemMil)
println(utcMil)
println(kstMil)
println(caMil)
2020-06-04T08:23:19.985131Z
2020-06-04T17:23:19.988248+09:00
2020-06-04T00:23:19.988271-08:00
1591258999
1591258999
1591258999
1591258999
Java DateTimeFormatterBuilder
여러가지 형식의 DateTimeFormat 을 try-catch 없이 한번에 parse 할 수 있다.
private static final DateTimeFormatter formatter;
static {
DateTimeFormatterBuilder dateFormats = new DateTimeFormatterBuilder();
dateFormats.appendOptional(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
dateFormats.appendOptional(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
dateFormats.appendOptional(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
formatter = dateFormats.toFormatter();
}