【问题标题】:To compare 2 dates in different format in Java? [duplicate]在Java中比较2个不同格式的日期? [复制]
【发布时间】:2019-07-16 12:22:18
【问题描述】:

比较不同格式的 2 个日期。两者都在字符串中。

String date = "2019-01-01";         
String date1 = "Mar 13 2019 11:33 AM";

但在线程“main”java.text.ParseException: Unparseable date: "Mar 13 2019 11:33 AM" 中作为异常出现错误

// code :       
Date date11=new SimpleDateFormat("yyyy-mm-dd").parse(date);  
System.out.println(date11);  

Date date22=new SimpleDateFormat("mmm dd yyyy HH:MM ").parse(date1);  
System.out.println(date22);  

if(date22.compareTo(date11) > 0) {
    System.out.println("date 22 is greater tehan date 11 ");
}

预期:以相同格式解析 2 个字符串日期,然后进行比较。 实际:解析日期时出现以下错误。

面临的错误:

Exception in thread "main" java.text.ParseException: Unparseable date: "Mar 13 2019 11:33 AM"
        at java.text.DateFormat.parse(Unknown Source)
        at aaa.basic.main(basic.java:24)

提前致谢。

【问题讨论】:

  • m 代表分钟。 M 代表月份。而 SimpleDateFormat 已过时。停止使用它。使用 java.time 包中的类。
  • 您在 AM / PM 的格式字符串中缺少标记
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用LocalDateLocalDateTimeDateTimeFormatter,均来自java.time, the modern Java date and time API

标签: java date datetime


【解决方案1】:

您还需要指定语言环境

new SimpleDateFormat("MMM dd yyyy hh:mm aa", Locale.ENGLISH).parse(date1);

【讨论】:

    【解决方案2】:

    .parse() 方法上寻址ParseException

    您的代码应该给出以下错误:

    2019 年 1 月 1 日星期二 00:01:00 CAT

    线程“main”java.text.ParseException 中的异常:无法解析的日期:“Mar 13 2019 11:33 AM”

    在 java.text.DateFormat.parse(DateFormat.java:366)

    在 Main.main(Main.java:15)

    以下日期格式应该有效。如需更多示例,请参阅this

    MMM dd yyyy hh:mm aa
    

    (感谢@MarcStrobel for locale catch);

    这可能会有所帮助。 See for example.

    使用.before().after() 方法。

    您的工作示例将类似于:

    Date date11 = new SimpleDateFormat("yyyy-mm-dd").parse(date);  
    Date date22 = new SimpleDateFormat("MMM dd yyyy hh:mm aa").parse(date1); 
    if (date11.before(date22)) {
        System.out.println("date 11 is before date 22");
    } else {
        System.out.println("date 11 is after date 22");
    }
    

    正如@DorianGray 所说,.compareTo() 方法也应该可以工作,但我更喜欢在之前/之后更具体

    希望对你有帮助!

    【讨论】:

    • 这没有帮助,因为他的代码中有一个ParseException。与compareTo 的比较很好。
    • @DorianGray 更新
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    相关资源
    最近更新 更多