Java JSR-310

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();
  }