java core
[java] Date를 GMT스타일(is8601)로 변환하는 방법 - 또는 그 반대로 변환 방법 예제
'김용환'
2018. 1. 19. 18:46
Date를 GMT스타일(is8601)의 표현 문자열(momentjs가 표현하는 날짜시간 문자열)로 변경하는 예제이다.
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));
String text = sdf.format(date);
System.out.println(text);
// "2018-01-19T20:34:46.177+09:00"
여기서 XXX의 의미가 중요하다.
XXX는 +09:00를,
X는 +09을 의미한다.
GMT 스타일의 ISO8601문자열을 Date로 변환하려면 다음과 같이 개발한다.
val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"))
val date: Date = dateFormat.parse("2017-12-11T13:00:00+09:00")
println(date)
Mon Dec 11 13:00:00 KST 2017
--- 참고로 Joda DateTime의 fomatter는 잘 인식이 안되서 SimpleDateFormat을 사용한다.
val fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssXXX")
다음 예제는 SimpleDateFormat과 JodaTime을 이용해 UTC로 리턴하는 예이다.
def getUTCDateTime(dateTime: String): DateTime = {
val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"))
new DateTime(dateFormat.parse(dateTime), DateTimeZone.UTC)
}
println(getUTCDateTime("2017-12-11T07:00:00+09:00"))의 결과는 2017-12-10T22:00:00.000Z이다.