2012-05-10 3 views
2

날짜로 변환하려는 타임 스탬프가 있습니다. 나는이 타임 스탬프를 시도했다 : 1336425840. 이것은 월요일, 07 5 월 2012 21:24:00 GMT이어야하는데, GMT는 에뮬레이터를 설정해야하는 시간대이다. 나는 노력이 :Android 에뮬레이터에서 unix 타임 스탬프를 날짜로 변환합니다.

final Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(1336425840*1000); 
Date d = c.getTime(); 
Log.i("MyTag", "Hours: " + d.getHours()); 

결과는 다음과 같습니다 시간 : 23 반환 된 날짜가 내 시스템에 설정 한 시간대 인 GMT + 2에 따라 계산처럼

그래서 보인다. 에뮬레이터의 시간대가 GMT로 설정되어 있기 때문에 g.hetHours()가 21을 반환 할 것으로 예상했습니다.

또한 타임 스탬프는 정확한 타임 스탬프를 반환하는 mktime을 사용하여 C에서 실제 날짜를 읽는 결과입니다. 그러나 Java는 다른 시간대를 가리키는 것으로 보입니다. 내가 뭐 잘못하고 있니? Why not Mon, 07 May 2012 21:24:00 GMT가 반환 되었습니까?

+0

확인이를 HTTP ://stackoverflow.com/questions/2818086/android-get-current-utc-time – moujib

답변

5

1336425840*1000int의 정규 범위를 벗어나는 값을 제공 할 것입니다. 실제로 Calendar 개체의 전체 날짜를 인쇄하면 Thu Jan 08 23:56:50 GMT 1970이라는 표시가 나타나고 이는 23 시간을 설명합니다.

변경에 곱셈 : (주 끝에 L)

c.setTimeInMillis(1336425840 * 1000L); 

// 편집 : 쉽게 확인 :

System.out.println((1336425840 * 1000L > Integer.MAX_VALUE)); 

:

+0

예, 방금 나 자신을 발견했습니다. 나는 1970 :-D 고마워! –

2

DateFormat 개체를 사용하고 setTimeZone()으로 표준 시간대를 설정해야합니다.

+0

예, 정상적으로 작동합니다. 그런데 내가 왜보고 한 코드가 아닌가? –

+0

기본적으로 현재 사용중인 컴퓨터의 현재 시간대를 사용하기 때문입니다. 대신에 GMT를 사용하도록 지시해야합니다. –

+0

시간대를 지정하지 않아도 작동합니다. –

관련 문제