2011-01-05 5 views
4

이벤트 관리 시스템에 포함될 "날짜 점프"알고리즘의 빠른 구현이 필요합니다.
이벤트가 트리거되고 다음 10 분 (동기화 메서드)의 날짜를 설정합니다. 날짜가 1로 내려 간다 때문에 Java 날짜가 다음 10 분으로 이동합니다.

Event occurs at "2010-01-05 13:10:12" and sets the 
    next date to be "2010-01-05 13:20:00" 

및 이벤트가 10 분에 정확히 (가정)가 발생했을 경우, 다음 하나는 않을

Event occurs at "2010-01-05 13:30:00" and sets the 
    next date to be "2010-01-05 13:40:00" 

을 (설정해야합니다 예를

를 들어

1/1000 초, 다만 ...).

내 첫 번째 아이디어는 현재 Date()을 얻고 ((time/10mn)+1)*10mn과 같이 정수 (긴) 나누기를 통해 getTime() 메서드에서 ms으로 직접 작업하는 것입니다. 이 신뢰할 수있는 또한 빠른 등을 할 가지고 있기 때문에

, 나는 내가 구현하기 전에 동료 OSers을 요청할 것입니다 생각했다.

+0

중복 : [java에서 가장 가까운 분기 시간으로 시간을 반올림하는 방법] (http://stackoverflow.com/q/3553964/642706) –

답변

9
당신은/사용 매우 유사한 질문에 대한 내 대답을 적용 할 수

이 같은

How to round time to the nearest quarter in java?

뭔가 : 임의 작동하지 않습니다 MS의 신기원 시간

int unroundedMinutes = calendar.get(Calendar.MINUTE); 
int mod = unroundedMinutes % 10; 
calendar.add(Calendar.MINUTE, mod == 0 ? 10 : 10 - mod); 
calendar.set(Calendar.SECOND, 0); 
calendar.set(Calendar.MILLISECOND, 0); 
+0

속도 측면에서 볼 때 캘린더 할당 및'add()' 메소드는'getTime()'및'/'와 비교하여 수행합니까? (빨리해야 함) –

0

당신의 접근 방식 일부 표준 시간대는 GMT와의 N * 15 분 오프셋이 있기 때문에 표준 시간대가 필요합니다. 이 시간대 내에서 코드는 간격을 5-14에서 15로, 15-24에서 25로 이동합니다.

GregorianCalendar 클래스의 해당 필드를 조작 할 때 실제로 성능을 테스트하고 성능이 충분하지 않다고 생각하거나 재미로 바퀴를 다시 만들려고합니까?

+0

내 요구 사항에 따라 조언을 해줄 것을 기대합니다. –

+1

글쎄, 당신의 접근 방식은 분명히 신뢰할 수 없습니다. "빠른"이라는 정확한 의미를 지정하거나 벤치 마크를 위해 프로덕션 하드웨어에 대한 액세스를 제공하고 저에게 지불하는 경우를 제외하고는 캘린더 접근 방식이 다른 요구 사항 (빠른)을 충족시키는 지 여부를 알 수 없습니다. 또는, 당신은 물론 그것이 충분히 빠르다는 것을 확인하기 위해 5 분을 스스로 쓸 수도 있습니다. – jarnbjo

관련 문제