2014-08-28 2 views
1

필자는 제 3 자의 lib를 통해 제가 날짜를 얻는 시스템을 가지고 있습니다. 입력 한 날짜가 1914-08-28이며 시간과 분이 마음에 들지 않는다는 사실을 알고 있습니다. 이 날짜를 고객에게 전달해야하며 1914-08-28T00 : 00과 같은 형식이어야합니다.java.util.Date의 해석

제 3 자 lib에서 얻은 것은 java.util.Date이고 디버깅하는 동안 나는 이상하게 보였던 것을 stumpled했습니다.
다음 이미지를보십시오. 나는 toString()을 호출 할 때 Tu Aug 27, 22:00:00 CET 1914을 반환하지만 포함 된 cdate을 보면 줄루 시간에있는 것처럼 보입니다. DateFormat의와 함께이 서식

enter image description here

나에게 1914-08-27T00을 제공합니다 : 00 :

java.text.DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'00:00"); 

내가 정말 여기에 기대하는 것은 내가 줄루 시간에 날짜를 가지고있다 (1914- 08-27T22 : 00Z) 1914-08-28T00 : 00 CET (다음날)와 같습니다.

다음 코드로 재생산 할 수 있습니다.

Calendar instance.set(1914, 7, 28, 22, 0); 
instance.setTimeZone(TimeZone.getTimeZone("CET")); 
Date d = instance.getTime(); 

지금 d는 CET 시간과 줄루어 시간을 표시합니다 CDATE (가시 디버깅)을 표시하지만 서로 다른되지 않습니다. 기본 표준 시간대를 사용하면 CET 시간이 줄루 시간과 다를 것으로 예상됩니다.

설명이 무엇입니까?

+1

'SimpleDateFormat'을 사용할 수 있습니다. –

+1

이 동작을 나타내는 코드 조각을 제공하십시오. –

+0

SimpleDateFormat을 사용하여 형식을 지정합니다. 그것은 8 월 27 일자로 형식을 지정합니다. 내가 이해하지 못하는 것은 그것이 줄레 (Zule) 시간에있는 것처럼 보입니다. 그리고 나서 8 월 28 일입니다. CET – homaxto

답변

6

java.util.Date은 특정 시간대가 아닙니다. 전 세계의 현지 시간이 다른 시간대 일뿐입니다.

내부적으로는 유닉스 시대부터의 밀리 세컨드의 수는, 그러나 솔직히 그것은 다른 표현 일 수 ... 그리고 우리는 일반적으로 1970-01-01T00로 "유닉스 시대"를 생각하지만 : 00 : 00Z , 당신은 똑같이 1970-01-01T01 : 00 : 00 + 01 : 00이라고 생각할 수 있습니다 ... 그들은 같은 시점을 나타냅니다.

근본적으로 java.util.Date은 모든 시간대에있는 것으로 생각하지 마세요. toString()은 항상 많은 시스템 개발자가 혼동하는 시스템 기본 시간대를 사용합니다. 항상 (예 : SimpleDateFormat을) 전용 포매터를 사용하여 관심있는 시간대를 지정합니다.

아, 그리고 이상적으로 ... 훨씬 뛰어난 날짜/시간 API를 둘있는 java.time 또는 Joda Time를 사용하여 이동