[java] Java에서 시간없이 날짜를 얻으려면 어떻게합니까?

타임 스탬프없이 현재 날짜를 가져 오기 위해 스택 오버플로 질문 Java 프로그램 에서 계속 :

시간없이 Date 객체를 얻는 가장 효율적인 방법은 무엇입니까? 이 둘 외에 다른 방법이 있습니까?

// Method 1
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date dateWithoutTime = sdf.parse(sdf.format(new Date()));

// Method 2
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
dateWithoutTime = cal.getTime();

업데이트 :

  1. 나는 Joda-Time 에 대해 알고 있었다 . 나는 그런 간단한 작업에 대한 추가 라이브러리를 피하려고합니다. 그러나 지금까지의 답변을 바탕으로 Joda-Time은 매우 인기가있는 것으로 보이므로 고려할 수 있습니다.

  2. 에 의해 효율적으로 , 나는 임시 객체 피하려는 의미 String로 사용되는 창조 method 1한편, method 2대신 솔루션의 해킹처럼 보인다.



답변

당신은 절대적으로 마십시오 사용 java.util.Date? 나는 것 철저하게 사용하는 것이 좋습니다 Joda 시간 또는 java.time대신 자바 8에서 패키지를. 특히, 날짜 및 달력 은 “일자”와 같은 개념이없는 특정 순간을 항상 나타내지 만 Joda Time 에는 이 유형 ( LocalDate)을 나타내는 유형이 있습니다. 실제로하려는 작업을 나타내는 유형을 사용할 수 있으면 코드가 훨씬 명확 해집니다.

Joda Time을 사용하거나 java.time내장 java.util유형 대신 다른 많은 이유가 있습니다 . 일반적으로 API가 훨씬 좋습니다. java.util.Date예를 들어 데이터베이스 상호 작용을 위해 필요한 경우 언제든지 자신의 코드 경계 에서 a로 /에서 변환 할 수 있습니다 .


답변

다음은 시간을 설정하여 오늘 날짜를 얻는 데 사용한 내용입니다 00:00:00.

DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

Date today = new Date();

Date todayWithZeroTime = formatter.parse(formatter.format(today));


답변

Apache Commons 라이브러리에서 DateUtils.truncate 를 사용할 수 있습니다 .

예:

DateUtils.truncate(new Date(), java.util.Calendar.DAY_OF_MONTH)


답변

이 둘 외에 다른 방법이 있습니까?

그렇습니다.

LocalDate.now(
    ZoneId.of( "Pacific/Auckland" )
)

java.time

Java 8 이상에는 새로운 java.time 패키지가 내장되어 있습니다. 튜토리얼을 참조하십시오 . 많은 java.time 기능은 자바 6 7 백 포팅 ThreeTen – 백 포트 및 상기 안드로이드 적응 ThreeTenABP .

Joda-Time 과 유사하게 , java.time은 LocalDate시간대와 시간대가없는 날짜 전용 값을 나타내는 클래스를 제공합니다 .

참고 시간대가 중요한 특정 날짜를 결정합니다. 예를 들어 파리 자정이되었을 때 날짜는 여전히 몬트리올에서 “어제”입니다.

LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) ) ;

기본적으로 java.time은 날짜 또는 날짜-시간 값의 문자열 표시를 생성 할 때 ISO 8601 표준을 사용합니다 . (Joda-Time과의 또 다른 유사점) 간단히 호출하여과 toString()같은 텍스트를 생성하십시오 2015-05-21.

String output = today.toString() ; 

java.time에 대하여

java.time의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 – 시간의 수업을 java.util.Date, Calendar, SimpleDateFormat.

Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.

자세한 내용은 Oracle Tutorial을 참조하십시오 . 많은 예제와 설명을 보려면 스택 오버플로를 검색하십시오. 사양은 JSR 310입니다 입니다.

java.time 클래스는 어디서 구할 수 있습니까?

ThreeTen – 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 향후 java.time에 추가 될 수있는 입증 된 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval, YearWeek, YearQuarter, 그리고 .


답변

가장 간단한 방법 :

long millisInDay = 60 * 60 * 24 * 1000;
long currentTime = new Date().getTime();
long dateOnly = (currentTime / millisInDay) * millisInDay;
Date clearDate = new Date(dateOnly);


답변

이 질문에 대한 표준 답변은 Joda Time 을 사용하는 것 입니다. API가 더 좋으며 포맷터와 파서를 사용하는 경우 직관적이지 않은 스레드 안전성 부족을 피할 수 있습니다 SimpleDateFormat.

Joda를 사용하면 간단히 할 수 있습니다.

LocalDate d = new LocalDate();

업데이트 : : Java 8을 사용하면 이것을 사용하여 달성 할 수 있습니다

LocalDate date = LocalDate.now();


답변

이것은 간단한 방법입니다.

Calendar cal = Calendar.getInstance();
SimpleDateFormat dateOnly = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(dateOnly.format(cal.getTime()));