타임 스탬프없이 현재 날짜를 가져 오기 위해 스택 오버플로 질문 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();
업데이트 :
-
나는 Joda-Time 에 대해 알고 있었다 . 나는 그런 간단한 작업에 대한 추가 라이브러리를 피하려고합니다. 그러나 지금까지의 답변을 바탕으로 Joda-Time은 매우 인기가있는 것으로 보이므로 고려할 수 있습니다.
-
에 의해 효율적으로 , 나는 임시 객체 피하려는 의미
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 클래스는 어디서 구할 수 있습니까?
- 자바 SE 8 , 자바 SE 9 , 나중에
- 내장.
- 번들로 구현 된 표준 Java API의 일부입니다.
- Java 9에는 몇 가지 사소한 기능과 수정 사항이 추가되었습니다.
- Java SE 6 및 Java SE 7
- 대부분의 java.time 기능은 ThreeTen-Backport의 Java 6 & 7로 백 포트됩니다 .
- 기계적 인조 인간
- java.time 클래스의 최신 버전의 Android 번들 구현.
- 이전 Android의 경우 ThreeTenABP 프로젝트 는 위에서 언급 한 ThreeTen-Backport를 채택합니다 . ThreeTenABP 사용 방법…을 참조하십시오 .
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()));