10

尝试将字符串解析为日历时,我遇到了最奇怪的错误。似乎它弄乱了我用来设置结果日历时间的 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
4

2 回答 2

18

您正在使用YYYY格式说明符,即周年(我相信从 Java 7 开始)。你想要yyyy,这只是“年”。(请参阅SimpleDateFormat文档。)

我怀疑日期的其余部分已经过时,因为您还尝试指定月份和日期,这在一周年中并不是真正的“功能”......如果您指定了“一周中的一周”和日期周,它可能会给出一些更明智的结果,但前提是你真的打算使用周年,我对此表示怀疑:)

于 2012-03-22T23:18:55.280 回答
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

看这里:

于 2012-03-22T23:21:09.673 回答