Получение неверных данных при использовании SimpleDateFormat.parse()
Я получаю самую странную ошибку при попытке проанализировать строку в виде календаря.
Кажется, что он испортил объект Date, который я использую для установки времени календаря результатов. Ошибка довольно непоследовательная (или я не вижу в ней никакой логики). Может ли кто-нибудь указать, что я могу делать неправильно?
public class caltest{
public static final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS");
public static void main(String[] args) {
String date1 = "1992-03-11 12:00:12.123";
String date2 = "1993-03-11 12:00:12.123";
String date3 = "1994-03-11 12:00:12.123";
String date4 = "1995-03-11 12:00:12.123";
parseStringAsCalendar(date1);
parseStringAsCalendar(date2);
parseStringAsCalendar(date3);
parseStringAsCalendar(date4);
}
public static String calendarToString(Calendar cal) {
return sdf.format(cal.getTime());
}
public static Calendar parseStringAsCalendar(String s) {
Date time = null;
try {
time = sdf.parse(s);
} catch (ParseException e) {
System.out.println("Exception");
e.printStackTrace();
}
System.out.println(time.toString());
GregorianCalendar ret = new GregorianCalendar();
ret.setTime(time);
return ret;
}
}
Вывод:
Sun Dec 29 12:00:12 CET 1991
Sun Dec 27 12:00:12 CET 1992
Sun Dec 26 12:00:12 CET 1993
Sun Jan 01 12:00:12 CET 1995
Ответы
Ответ 1
Вы используете YYYY
в своем спецификаторе формата, который является недельным годом (по-моему, на Java 7). Вы хотите YYYY
, который просто "год". (См. Документацию SimpleDateFormat
.)
Я подозреваю, что остальная часть даты отсутствовала, потому что вы пытались также указать месяц и день, которые на самом деле не являются "функциями" в течение недели... если бы вы указали "неделю недели", и день недели, это могло бы дать некоторые более разумные результаты, но только если вы действительно хотели использовать недельные годы, что я сомневаюсь:)
Ответ 2
Используйте это:
public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
В нижнем регистре y
в год, а не в верхнем регистре y
. При этом результат:
Wed Mar 11 12:00:12 EST 1992
Thu Mar 11 12:00:12 EST 1993
Fri Mar 11 12:00:12 EST 1994
Sat Mar 11 12:00:12 EST 1995
Смотрите здесь: