将日期转换为JodaTime中的其他格式



我有一个问题,在Java中使用Joda-Time库转换数据。实际上,输入日期有这样的格式:

Mon Apr 28 18:57:42 CEST 2014

我想看到这样的输出:

2014-04-28

我试过这段代码,但不工作:

    DateTimeFormatter dtf_out = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTimeFormatter dtf_inp = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zzz yyyy");
    String a = String.valueOf(dtf_inp.parseDateTime(String.valueOf(resultsJs.get(0).getTimestamp()))); //crash here
    String b = String.valueOf(dtf_out.parseDateTime(a));

注:resultsJs.get(0).getTimestamp()为Date格式。

相反,这是日志:

...
Caused by: java.lang.IllegalArgumentException: Invalid format: "Mon Apr 28 18:57:42 CEST 2014"
            at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:873)
...

您正在尝试解析epoch毫秒值,但您只能解析字符串。

然而,似乎你已经有一个毫秒值可用,所以只需要格式化,这是通过print()方法:

DateTimeFormatter dtf_out = DateTimeFormat.forPattern("yyyy-MM-dd");
String b = dtf_out.print(resultsJs.get(0).getTimestamp().getTime());

在从实际字符串中删除时区信息后,它的工作很好,但我在解析时使用了时区,因此它会根据区域设置为您提供正确的结果。

请验证结果。

// pattern zzz is removed that is used for parsing time zone
DateTimeFormatter dtf_inp = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss yyyy");
// time zone is added while parsing date time
DateTime dateTime = dtf_inp.withZone(DateTimeZone.forID("Europe/Paris"))
                                   .parseDateTime("Mon Apr 28 18:57:42 2014");
// simply call toString(pattern) on DateTime
System.out.println(dateTime.toString("yyyy-MM-dd")); // 2014-04-28
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String output = sdf.format(yourDate);

相关内容

  • 没有找到相关文章

最新更新