2010-06-22 2 views
6

오늘의 시작일 (오늘의 00:00:00 a.m.)에 대해 java.util.Date를 계산해야합니다. 사람이하는 java.util.Calendar의 필드를 재설정하는 것보다 더 좋은 것을 알고 있나요 :오늘의 00:00:00 a.m.에 대한 날짜를 계산하는 방법은 무엇입니까?

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.AM_PM, Calendar.AM); 
cal.set(Calendar.HOUR, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 0); 
+0

그것은 그렇게 나쁘지 않다. –

+0

하지만 간결함을 좋아합니다 ... – Nulldevice

+2

다음에 'getTodayAtMidnight()'라는 메서드로 묶습니다. –

답변

7

시간대를 신경 쓰지 않는다면 해결책은 괜찮습니다. 그렇지 않으면 JodaTime을 살펴볼 가치가 있습니다.

결국 JodaTime으로 전환하기로 결정한 경우 귀하의 상황에서 사용하게 될 DateMidnight 클래스를 사용할 수 있습니다.

1

내가 같은 배에있어, 그리고 당신이 제공 한 것은 내가 할 방법이다. 나는 DateUtil.stripToMidnight(...) 기능을 가지고 있습니다 ...

그러나이 모든 작업을 수행 할 때는 TimeZones를 고려해야합니다. 여기서 오전 0:00은 전 세계의 다른 지역과 동일하지 않습니다.

JodaTime에서이 작업을 수행하는 방법이있을 수 있지만 그 사실을 알 수는 없습니다.

0

또 다른 추가 라이브러리없이 옵션 :

import java.sql.Date; 

public class DateTest { 
    public static void main(String[] args) { 
     long MS_PER_DAY = 24L * 60 * 60 * 1000; 
     long msWithoutTime = (System.currentTimeMillis()/MS_PER_DAY) * MS_PER_DAY; 
     Date date = new Date(msWithoutTime); 
     System.out.println(date.toGMTString()); 
    } 
} 
+0

일은 항상 24 시간이 아닙니다. (힌트 : 일광 절약 시간제) – Pac0

4

다음 코드 그것은 시간대 값을 고려하지 않을 것이다 0시 0분 0초

Calendar current = Calendar.getInstance(); 
current.set(current.get(Calendar.YEAR),current.get(Calendar.MONTH),current.get(Calendar.DATE),0,0,0); 

로 시간을 현재 날짜의 달력 개체를 반환하고 코드와 거의 같습니다. 차이점은 단 한 줄로 모두 0으로 재설정됩니다.

DateTime start = dt.getStartOfDay(); 
+0

시간을 0 대신 12로 설정합니다. – prashu132

1

당신은 시간대에 대해 신경 쓰지 않는다.

LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT); 
Date midnight = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); 
2

이 캘린더 java8의로

public class DateTest { 
    public static void main(String[] args) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    long time = dateFormat.parse(dateFormat.format(new Date())).getTime(); 
    System.out.println("todays start date : " + new Date(time)); 
    } 
} 
0

을 자바의 무거운 요소를 사용하지 않는 한이 솔루션은 더 좋을 수 있습니다, 그것은 가정 따를 수행 할 수 있습니다 다음 date4j 라이브러리와

관련 문제