2009-03-11 5 views
4

java.util.Date는 거의 사용되지 않으므로 주어진 날짜, UTC 시간에 대한 타임 스탬프를 얻는 올바른 방법은 무엇입니까? System.currentTimeMillis()과 비교할 수있는 값입니다.주어진 날짜에 대한 System.currentTimeMillis()?

+0

주의 : ['java.util.Date'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)와 같은 번거로운 이전 날짜 시간 클래스), ['java.util.Calendar'] (https://docs.oracle.com/javase/8/docs/api/java/util/Date.html),'java.text.SimpleTextFormat'은 이제 [ 레거시] (https://en.wikipedia.org/wiki/Legacy_system), [java.time] (https://docs.oracle.com/javase/8/docs/api/java/time/package) -summary.html) 클래스. –

답변

10

Calendar 클래스를 사용하면 특정 시간대의 특정 시간에 타임 스탬프를 만들 수 있습니다.

Calendar cal = new GregorianCalendar(); 
cal.set(Calendar.DAY_OF_MONTH, 10); 
// etc... 

if (System.currentTimeMillis() < cal.getTimeInMillis()) { 
    // do your stuff 
} 

편집 : 당신이 그이 후에는 다음 밀리 초 시간 스탬프와 비교 얻을 수있는 달력 인스턴스에서 밀리 초 단위로 시간을 얻기 위해 더 직접적인 방법을 사용하도록 변경. 고마워 무법자 프로그래머

+2

캘린더에는 실제로 getTime(). getTime()보다 좀 더 직접적인 getTimeInMillis() 메소드가 있습니다. 어쨌든 +1하십시오. –

1

Calendar 클래스를 살펴보십시오.

현재 시간 (더 이상 사용되지 않음)으로 데이터를 만든 다음 그 시간에서 캘린더를 만들 수 있습니다 (다른 방법도 있음).

7

날짜가 사용 된 많은 것들에 대한 "공식적인"대체품은 캘린더입니다. 불행히도 그것은 다소 어색하고 지나치게 조작되었습니다. 문제는 다음과 같이 해결할 수 있습니다

long currentMillis = System.currentTimeMillis(); 
Date date = new Date(currentMillis); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTime(date); 
long calendarMillis = calendar.getTimeInMillis(); 
assert currentMillis == calendarMillis; 

달력은 또한 다른 방법으로 초기화 할 수 있습니다, 심지어 하나 개의 필드를 한 번에 (시, 분, 초 등). Javadoc을 살펴보십시오.

3

직접 해보지는 않았지만 프로젝트에서 외부 라이브러리를 허용하는 경우 JODA-Time 프로젝트 (오픈 소스)를 살펴 봐야한다고 생각합니다. AFAIK, JODA 시간은 날짜/시간에 새로운 JSR (일반적으로 Java7)에 많은 기여를했습니다.

많은 사람들이 JODA 시간이 모든 java.util.Date/Calendar 문제 ;-)

확실히 가치가 시도의 해결책 주장한다.

+0

JODA-Time - 현재 java.util.Date 및 Calendar는 여러 가지면에서 상당히 파괴되어 있습니다 (JODA 페이지에서 JODA 프로젝트가 처음 만들어진 이유에 대한 동기 부여가 있습니다). –

관련 문제