有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SimpleDataFormat无法正确处理上午12点

我试图用SimpleDateFormat解析字符串"2/20/2012 12:00:00 AM",它似乎是在下午12点出来的

    Date fromFmt = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aa")
                       .parse("2/20/2012 12:00:00 AM");

    // Calendar months are 0-indexed
    Date fromCal = new Date(new GregorianCalendar(2012, 1, 20, 0, 0, 0)
                       .getTimeInMillis());

    System.out.println(fromFmt);
    System.out.println(fromCal);

产出:

Mon Feb 20 12:00:00 PST 2012
Mon Feb 20 00:00:00 PST 2012

我希望他们都能输出后者。我的格式字符串有问题吗

(请不要说“使用JodaTime”。)


共 (1) 个答案

  1. # 1 楼答案

    改用这个:

    new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa")
    

    注意,我使用了hh而不是HH。前者是这样做的:

    Hour in am/pm (1-12)

    HH这样做:

    Hour in day (0-23)


    你在告诉SimpleDateFormat你将在一小时内通过0-23范围内的考试,但你实际上没有这样做。这就是为什么你会遇到这个问题