【问题标题】:Convert date to other format in JodaTime在 JodaTime 中将日期转换为其他格式
【发布时间】:2014-06-26 12:58:23
【问题描述】:

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

【问题讨论】:

  • 什么不起作用?什么是崩溃信息?你确定 resultsJs.get(0) 会返回一些东西吗?
  • @jeffrey_t_b 感谢您的回复!抱歉,帖子不完整,我已经编辑了主要帖子。无论如何, resultsJs.get(0) 是正确的。他不返回 null 或类似的! :)

标签: java date datetime converter jodatime


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!但是 print() 方法接受 Long 值输入。我可以从 Date 解析到 Long 吗?
  • 无需解析 - 查看最新编辑,它使用 DategetTime() 方法(我不确定从 getTimestamp() 返回什么类型)
  • 谢谢!!!有用!! :) 我更喜欢这个解决方案,因为我已经用 1 行解决了我的问题。 :)
【解决方案2】:

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

请验证结果。

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

【讨论】:

  • 谢谢!我已经用@Bohemian 的解决方案解决了。无论如何,我也让我感到惊讶......事实上,在文档中有这样的文字:区域名称:时区名称('z')无法解析。
【解决方案3】:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String output = sdf.format(yourDate);

【讨论】:

  • OP 正在使用 Joda 类。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
相关资源
最近更新 更多