Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JodaTime中将日期转换为其他格式_Java_Date_Datetime_Converter_Jodatime - Fatal编程技术网

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

Java 在JodaTime中将日期转换为其他格式,java,date,datetime,converter,jodatime,Java,Date,Datetime,Converter,Jodatime,我在使用库转换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 H

我在使用库转换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)
...

您正试图解析一个历元毫秒值,但只能解析一个字符串

但是,您似乎已经有一个毫秒值可用,因此只需要格式化,即通过
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

什么不起作用?什么是崩溃信息?你确定resultsJs.get(0)返回了什么吗?@jeffrey\u t\b谢谢你的回复!对不起,文章不完整,我已经编辑了主要文章。无论如何,resultsJs.get(0)是正确的。他不会返回null或类似值!:)OP的可能副本正在使用Joda类。谢谢!但是print()方法接受长值输入。我可以从Date解析到Long吗?无需解析-请参阅最新编辑,它使用
Date
getTime()
方法(我不确定从
getTimestamp()
返回的是什么类型),谢谢!!!它起作用了!!:)我更喜欢这个解决方案,因为我已经用1行解决了我的问题。:)谢谢我已经用@Bohemian的解决方案解决了。无论如何,我也很惊讶…事实上,在文档中有这样一个文本:区域名称:时区名称('z')无法解析。
// 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