2013-07-14 7 views
2

타임 스탬프가 정확한 시간인지 (즉, 분, 초 또는 밀리 초 구성 요소가없는 시간을 나타냄) - 프리미티브 만 사용하는지 확인해야합니다. 이 코드는 초당 수백 번 호출되며 Calendar 또는 다른 객체의 오버 헤드를 원하지 않습니다.타임 스탬프가 정확한 시간인지 확인

나는 이것을 시도했지만 반올림 오류로 인해 비교가 실패하게됩니다.

float hours = (time/3600000f); 
boolean isExactHour = hours == (int)hours; 

예를 들어, 시간 = 1373763600470 인 경우 시간 = 381601.03125 일 경우. 그 시간 스탬프는 오늘 오전 1시 : 00 : 000 GMT를 나타내며 시간은 381601이어야합니다.

빠르고 쉬운 방법에 대한 아이디어가 있으십니까? 감사!

[편집] 난 시간대 상관 없으며, 초 도약하지 않는다, 그것을하지 않을 때

는 :)? (이 첫눈보다 더 복잡한 것 같다 명확성을 위해

. 타임 스탬프는 오늘 자정 (즉, 2013 년 7 월 13 일 00 : 00 : 00 : 000)을 반환하는 메소드에 의해 생성됩니다. 그런 다음, 항상이 초기 타임 스탬프 플러스/마이너스 5 분의 정확한 배수 인 long 배열에서 모든 타임 스탬프에 대해 계산합니다. 주어진 우표가 "시간의 최고점"인지 판단하는 나의 목표. 나는 5 분의 배수가 연말과 겹치는 엣지 케이스를 가지고 있을지도 모르지만 나는 그것들과 함께 살 수있다.

+2

* "빠르고 간단한 방법을 찾기위한 아이디어가 있습니까?"* 인터넷에서 낯선 사람들에게 '당신을 위해 할 것'을 물어보십시오. 오, 당신은 이미 그것을 다루었습니다. –

+0

'1373763600470'은 01 : 00 : 00 : 000이 아니라 01 : 00 : 00 : 470을 나타 냅니까? – smsnheck

+2

Erm, 왜 * exact *에 대해'float'을 사용하려고합니까? 나는 당신이 [모듈러스 연산]을 찾고 있다고 생각한다. (http://en.wikipedia.org/wiki/Modulo_operation) –

답변

5
(time % 36000000) == 0 

분명히 분명합니까?

편집

정확도 w.r.t.을 얻으려면 윤초는 1970 년 (말) 년 이후 색인 윤초의 조회 테이블을 가정, 뭔가 같은 : 정확도 수준을 필요로

((time-leapSeconds[(int)(time/(1000*60*60*24*365.2425))-1970]*1000) % 3600000) == 0 

프로그래머는 아래 나르의 의견을 모두 볼 수 있습니다.

+0

Doh, doh, doh, doh, doh 키보드와 의자 사이에 너무 많은 시간이 있음 – Simon

+0

윤년은 어떨까요? 캘린더를 사용하고 밀리 초, 초 및 분 필드를 확인합니다. 0이됩니다. – jackrabbit

+0

이것이 올바른 대답이라고 생각하지 않습니다. 윤초의 개념은 고려되지 않았습니다.그들은 약 1 초/1 년이고 시간 소인은 00:00:00 1/1 1970 년 이후의 초 수이므로 약 30-40 초 가량 벗어날 수 있습니다. –

관련 문제