java dateformat 및 simpledateformat가 잘못된 날짜를 반환합니다.
-
19-09-2019 - |
문제
오늘은 2010 년 2 월 9 일 화요일이며 날짜를 인쇄 할 때 잘못된 날짜를 얻습니다.
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date today = formatter.parse(String.format("%04d-%02d-%02d",
Calendar.getInstance().get(Calendar.YEAR),
Calendar.getInstance().get(Calendar.MONTH),
Calendar.getInstance().get(Calendar.DAY_OF_MONTH)));
System.out.println("Today is " + today.toString());
인쇄 라인은 다음과 같습니다. "오늘은 1 월 9 일 00:00:00 CST 2010입니다."
그것은 확실히 1 월 9 일 토요일이 아니며, 2 월 09 일 화요일입니다. 나는 뭔가 잘못하고 있다고 생각하고 있습니다. 그래서 누구든지 여기에 무엇이 잘못되었는지 알려줄 수 있습니까? 요일을 수동으로 설정해야합니까?
업데이트
참고 : 오늘은 초기화하고 싶지 않습니다 new Date()
시간, 몇 분, 초 및 밀리 초가 초기화되기를 원하기 때문입니다. 0
. 사용자가 오늘 날짜를 입력하고 Formatter를 사용하여 날짜 객체를 구성하는 경우 오늘 초기에 초기화하는 경우 오늘 날짜를 입력하고 Formatter를 사용하는 경우 오늘과 비교할 수 있도록 필요합니다. new Date()
그리고 나는 두 날짜를 비교합니다. 오늘은 될 것입니다 ~ 후에 사용자가 선택한 날짜 (잘못). 따라서 하루 초에 HR/Min/SEC/MS없이 오늘 초기화해야합니다.
해결책
혼란스럽게도, 달력은 0 (1 월)에서 11 (12 월)까지 계산되므로 달력에서 월 필드를 추출 할 때 "2010-01-09"를 Formatter.parse ()로 전달합니다.
관련에 대한 논의가 있습니다 그래서 질문.
다른 팁
Jodatime을 사용하지 않으려면 사용할 수 있습니다.
Calendar calendar = Calendar.getInstance();
calendar.set( Calendar.HOUR_OF_DAY, 0 );
calendar.set( Calendar.MINUTE, 0 );
calendar.set( Calendar.SECOND, 0 );
calendar.set( Calendar.MILLISECOND, 0 );
Date today = calendar.getTime();
이것은 문자열 서식/구문 분석 접근법보다 훨씬 효율적이고 오류가 적습니다.
Jodatime을 사용할 수 있다면 이것은 훨씬 선호되는 방법입니다.
LocalDate date = new DateTime().toLocaleDate();