문제

오늘은 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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top