将6个月前的日期转换为字符串

j8ag8udp  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(356)

我已经在sof和其他网站上找到了所有答案,并尝试这样做:

String fromDateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssX").format(new DateTime().plusMonths(-6));

但我有个例外:
线程“main”java.lang.illegalargumentexception中出现异常:无法将给定对象格式化为日期
我做错什么了?

bnlyeluc

bnlyeluc1#

请尝试以下操作:

String fromDateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sssX").format(new DateTime().minusMonths(6).toDate());

你必须转换 DateTimeDate 格式化之前,请使用 toDate() 方法就行了。
的api toDate() 和api minusMonths ,我建议您检查新方法的api

yjghlzjz

yjghlzjz2#

java.time文件

String fromDateTime = OffsetDateTime.now(ZoneId.systemDefault()).minusMonths(6).toString();
    System.out.println(fromDateTime);

刚才在我的电脑上运行时的输出:
2018-08-04t12:45:34.087966+01:00
time是现代的java日期和时间api,已经有效地取代了joda time。从主页:
请注意,joda time被认为是一个基本上“已完成”的项目。没有重大的增强计划。如果使用java se 8,请迁移到 java.time (jsr-310)。
在代码中,我利用了java.time类 toString 方法生成iso 8601格式,即您要求的格式。我发现秒上额外的小数不太可能带来任何问题,因为它们在标准之内是允许的。

乔达时间

String fromDateTime = new DateTime().minusMonths(6).toString();

输出示例:
2018-08-04t12:50:36.071+02:00 new DateTime() 只有毫秒精度。你总是能得到精确的3位小数。

我必须使用旧的java库,因为我在一家使用java版本<8的公司工作

java.time在Java6和Java7上也运行得很好,在所有条件相同的情况下,我推荐使用它而不是joda time。只有被迫使用Java5,joda time无疑是个不错的选择。
在Java8和更高版本以及更新的android设备上(api级别26),java.time是内置的。
在java6和java7中,得到了三个10的backport,即现代类的backport(对于jsr310是三个10;请参见底部的链接)。
在(旧的)android上使用android版本的threeten backport。它叫3TENABP。并确保从导入日期和时间类 org.threeten.bp 有分装的。

你的代码哪里出错了?

您的代码可以在没有错误迹象的情况下编译,但会出现错误 java.lang.IllegalArgumentException: Cannot format given Object as a Date 当你跑的时候。这是因为 SimpleDateFormat 无法格式化joda时间 DateTime 对象。我们当然会期望在编译时报告这一点。但是除了 SimpleDateFormat.format(Date) 还有一个 format(Object) 继承自 Format . 它适用于格式化 Date 或者 Number (从新纪元开始的毫秒)。此方法是编译器在传递 DateTime . 这就是为什么没有编译时错误消息。
提示:当你不能立即理解错误信息时,请将其粘贴到搜索引擎中。它通常会给你一个解释和解决方案。在这种情况下也是如此。

链接

joda time主页
oracle教程:日期时间解释如何使用 java.time .
java规范请求(jsr)310,其中 java.time 第一次被描述。
三十后港工程 java.time 到Java6和Java7(jsr-310为310)。
threetenabp,android版threeten backport
问:如何在android项目中使用threetenabp,有非常透彻的解释。
维基百科文章:iso 8601
姐妹问题:java:无法将给定对象格式化为日期。

相关问题