2014-05-08 144 views
2

我有一个问题,使用Joda-Time库转换Java中的数据。 Pratically,输入日期有这样的格式:将转换为其他格式的JodaTime

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

什么不行?什么是崩溃消息?你确定resultsJs.get(0)返回什么吗? –

+0

@jeffrey_t_b感谢您的回复!对不完整的帖子感到抱歉,我编辑了主帖。无论如何,resultsJs.get(0)是正确的。他不会返回null或类似的! :) – user3449772

+0

可能重复[如何解析日期到EEE MMM dd HH:mm:ss zzz yyyy格式?](http://stackoverflow.com/questions/16345711/how-to-parse-date-to-eee- mmm-dd-hhmmss-zzz-yyyy-format) –

回答

1

您试图解析一个划时代毫秒值,但你只能解析字符串。

然而,看来你已经拥有一毫秒的价值,所以只能格式化是必需的,这是通过print()方法:

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

谢谢!但是print()方法接受一个Long值输入。我可以从日期到长时间解析吗? – user3449772

+0

不需要解析 - 查看最新的编辑,它使用'Date'的getTime()'方法(我不确定从'getTimestamp()'返回什么类型) – Bohemian

+0

谢谢!有用!! :)我更喜欢这个解决方案,因为我用1行解决了我的问题。 :) – user3449772

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

OP正在使用Joda类。 –

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 
+0

谢谢!我用@Bohemian的解决方案解决了问题。 无论如何,我也很惊讶......事实上,在文档中有这样的文字: 区域名称:时区名称('z')无法解析。 – user3449772

相关问题