2012-05-14 3 views
2

Кто-нибудь понимает, почему год на выходе 2077 вместо 2011?Нечетное поведение Java-календаря

Integer yyyyMMdd = 20110830 
Calendar day = Calendar.getInstance(TimeZone.DEFAULT); 

Integer dd = yyyyMMdd % 100; 
Integer yyyy = yyyyMMdd/10000; 

day.set(yyyy, MM-1, dd); 

System.err.println(day.getTimeInMillis()); 
+1

Где MM взялось? Также попробуйте добавить: Calendar.setLenient (false); после второй строки и запустите его снова. –

+0

И почему вы используете 'Integer' вместо' int' всюду? Здесь здесь не будут возникать * проблемы *, но это явно странно. –

+0

О, и откуда взялся 'TimeZone.DEFAULT'? Вам также не хватает полуколонки в первой строке. Если вы собираетесь показать проблему, отправьте реальный код. –

ответ

5

Закрепив свой код так, чтобы он на самом деле компилирует, я получаю ожидаемый результат - так, вероятно, это ошибка в коде вы были действительно работает, но не показаны. Вот мой код:

import java.util.*; 

class Test { 
    public static void main(String[] args) { 
     int yyyyMMdd = 20110830; 
     Calendar day = Calendar.getInstance(TimeZone.getDefault()); 

     int dd = yyyyMMdd % 100; 
     int MM = (yyyyMMdd % 10000)/100; 
     int yyyy = yyyyMMdd/10000; 

     day.set(yyyy, MM-1, dd); 

     System.err.println(day.getTime()); 
    } 
} 

Результат на моей машине:

Tue Aug 30 07:18:33 BST 2011 
+0

Большое спасибо, Джон. Ты был прав. Мой код был действительно мусором – Ash1986

Смежные вопросы