Java:将日期2011年1月1日转换为dd-MM-yyyy格式

问题描述 投票:0回答:3

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

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)

我在上面遇到错误。

java date datetime xpages domino-designer-eclipse
3个回答
2
投票

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

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

0
投票

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


0
投票

java.time和ThreeTen Backport

这适用于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);

摘录的输出是:

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

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

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

现在输出是:

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

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

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

  • 在Java 8和更高版本以及更新的Android设备(来自API级别26)中,内置了现代API。
  • 在非Android Java 6和7中,获得了ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接。
  • 在(较旧的)Android上,请使用Android版的ThreeTen Backport。叫做ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

© www.soinside.com 2019 - 2024. All rights reserved.