我在尝试将字符串解析为日历时遇到了最奇怪的错误。 它似乎弄乱了我用来设置结果日历时间的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
答案 0 :(得分:18)
您在格式说明符中使用YYYY
,这是周年(从Java 7开始,我相信)。你想要yyyy
,这只是“年”。 (参见SimpleDateFormat
documentation。)
我怀疑剩下的日期已经结束了,因为你还试图指定月份和日期,这在一周中并不是真正的“功能”...如果你指定了“一周中的一周”和一周的某一天,它可能会给出一些更合理的结果,但前提是你真的意味着使用周年,我怀疑:)
答案 1 :(得分:3)
使用此:
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
见这里: