使用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)
...
答案 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);