在 java 中从 SimpleDateFormat 中检索两个相等的日期

Retrieve two equal dates from SimpleDateFormat in java

我制作了这个片段来展示我的问题:

import java.text.SimpleDateFormat;

public class Foo {
    public static void main(String[] args) {

        SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy");
        String date1 = "1412293500";
        String date2 = "1412336700";
        String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
        String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
        System.out.println(dateString1 + " " + dateString2);

    }
}

date1date2 以秒为单位表示,因此我期望输出中有两个不同的日期,但打印的日期相同。我在网上查看了这个 tool,正如你所看到的,日期与两个不同的日子有关。

我该如何解决这个问题?

这是因为您的日期是 12 小时制,并且您使用小写 'h' 作为小时格式。日期分别是凌晨 1 点和下午 1 点。为了在输出中看到这一点,请使用大写 'H' 或将 'a' 添加到 'am/pm' 标记的格式中。

你的两个时间戳正好相差 12 小时。

SimpleDateFormat 中的 h 标识符格式化 AM/PM (1-12) 中的小时数,因此您实际上并没有输出真正的差异:日期从 AM 转移到下午.

尝试使用 kH 标识符,将一天中的小时格式化为 (1-24) 或 (0-23)。

SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014

您还可以输出带有 a 标识符的 AM/PM 标记,如下所示:

SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM