【问题标题】:Java: Convert date 2011-Jan-01 to format of dd-MM-yyyyJava:将日期 2011-Jan-01 转换为 dd-MM-yyyy 的格式
【发布时间】:2019-10-10 08:44:05
【问题描述】:

我需要将日期 (2011-Jan-01) 转换为任何简单日期格式。

eclipse 设计器使用 Java 7。

    String pDate = obj.getJSONArray("product").getJSONObject(i).getString("createdDate");
    //"2011-Jan-01" - date format.
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
    try {
        Date fDate = format.parse(pDate);
        System.out.println("jsonDate: " + fDate);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("pDate: " + pDate);//"2011-Jan-01"


            errors:
            error:java.text.ParseException:Unparseable date:"2011-Jan-01"
            error: at java.text.DateFormat.parse(DateFormat.java:348)

我在上面遇到错误。

【问题讨论】:

  • 字符串日期是否有HH:mm:ss 部分?
  • 日期格式为“2011-Jan-01”。谢谢。
  • 但是为什么你的格式有那部分? (为什么是 Java 7?Java 8 中有更好的时间/日期类{实际版本是 13})
  • 只需从您的 SimpleDateFormat 中删除 HH:mm:ss 即可。
  • 在 Java 7 上,请考虑丢弃长期过时且臭名昭著的麻烦 SimpleDateFormat 和朋友,并将 ThreeTen Backport 添加到您的项目中,以便使用现代 Java 日期和时间 API java.time。使用起来感觉好多了。

标签: java date datetime xpages domino-designer-eclipse


【解决方案1】:

您的解析格式不应包含时间(因为您的输入只是日期),并且您需要另一个格式调用来生成所需的输出。类似的,

String pDate = "2011-Jan-01";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd");
try {
    Date fDate = format.parse(pDate);
    System.out.println(new SimpleDateFormat("dd-MM-yyyy").format(fDate));
} catch (ParseException e) {
    e.printStackTrace();
}

哪个输出

01-01-2011

【讨论】:

    【解决方案2】:

    java.time 和 ThreeTen 反向移植

    这适用于 Java 7(详情如下):

        DateTimeFormatter jsonDateFormatter = DateTimeFormatter.ofPattern("uuuu-MMM-dd", Locale.ENGLISH);
        DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
    
        String pDate = "2011-Jan-01";
        LocalDate fDate = LocalDate.parse(pDate, jsonDateFormatter);
        pDate = fDate.format(outputDateFormatter);
    
        System.out.println("Formatted date: " + pDate);
    

    sn-p 的输出是:

    格式化日期:01-01-2011

    除非您有充分的理由不这样做,否则我建议您为用户的语言环境使用 Java 的一种内置格式,而不是硬编码输出格式。例如:

        DateTimeFormatter outputDateFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
                .withLocale(Locale.UK);
    

    现在的输出是:

    格式化日期:2011 年 1 月 1 日

    问题:为什么选择 java.time?

    您尝试在问题中使用的旧日期时间类 DateSimpleDateFormat 设计不佳,后者出了名的麻烦。幸运的是,它们也早已过时。 java.time 是现代 Java 日期和时间 API,使用起来更方便。

    问题:我可以在 Java 7 上使用 java.time 吗?怎么样?

    是的,java.time 在 Java 7 上运行良好。它至少需要 Java 6

    • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,现代 API 是内置的。
    • 在非 Android 的 Java 6 和 7 中,获取 ThreeTen Backport,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
    • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

    链接

    【讨论】:

      【解决方案3】:

      SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 更改为SimpleDateFormat format = new SimpleDateFormat("yyyy-MMM-dd");

      【讨论】:

        猜你喜欢
        • 2017-06-24
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        • 2012-03-05
        • 1970-01-01
        • 2011-02-09
        相关资源
        最近更新 更多