【问题标题】:Java SimpleDateFormat and compareToJava SimpleDateFormat 和 compareTo
【发布时间】:2010-03-09 15:03:13
【问题描述】:

我有一个关于 SimpleDateFormat 类和 java.util.Date 的 compareto 方法的问题:

我正在构造一个 Date 对象,然后我格式化,最后我解析格式化的字符串并与原始日期进行比较。

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS");
Date originalDate = new Date();

String s = df.format(originalDate);
Date parsedDate = df.parse(s);

System.out.println("Original date: " + originalDate);
System.out.println("Formatted date: " + s);
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate));

结果:

原始日期:1 月 25 日星期一 15:43:23 CET 2010 格式化日期:2010.jan.25 03:43:23 868 originalDate compareTo 解析日期:1

为什么我总是得到“1”?为什么原始日期比解析日期大?

【问题讨论】:

    标签: java date simpledateformat


    【解决方案1】:

    我认为这是一个与 24 小时相关的问题,您的原始日期是 15,所以下午 3 点,而您解析的日期是 12 小时格式,这是因为您使用 h 格式说明符而不是 H 格式说明符。你的小时然后变成了错误的字符串,所以你失去了精度,因为当解析回来03 被认为是凌晨 3 点。尝试:

    DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
    

    【讨论】:

    • 或使用 a,AM/PM 说明符,
    • 我刚刚尝试了代码,它适用于 HH 所以这就是问题所在。当然,如建议的那样,如果您需要 12 小时格式,您可以使用 AM/PM 说明符而不是 HH
    【解决方案2】:

    如果您添加 Am/pm 标记 - a,它会起作用

    DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
    

    【讨论】:

      【解决方案3】:

      如果您只想比较日期,也许使用 getTime() 比较两个值会更好...

      【讨论】:

        猜你喜欢
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多