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

时间:2014-05-08 22:19:05

标签: java date datetime converter jodatime

使用Joda-Time库在Java中转换数据时遇到问题。 实际上,输入日期具有以下格式:

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()是日期格式。

相反,这是日志:

...
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)
...

3 个答案:

答案 0 :(得分:1)

您正在尝试解析一个纪元毫秒值,但您只能解析一个字符串。

但是,您似乎已经有一个毫秒值,因此只需要格式化,这是通过print()方法:

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

答案 1 :(得分:1)

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

请验证结果。

// 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

答案 2 :(得分:0)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String output = sdf.format(yourDate);