gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:45:10 25 4
gpt4 key购买 nike

我已经采纳了 SOF 和其他网站上给出的所有答案,并尝试这样做:

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

但我遇到了异常(exception):

线程“main”java.lang.IllegalArgumentException中出现异常:无法将给定对象格式化为日期

我做错了什么?

最佳答案

java.time

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

刚才在我的电脑上运行时的输出:

2018-08-04T12:45:34.087966+01:00

java.time 是现代 Java 日期和时间 API,已有效取代 Joda-Time。从主页:

Note that Joda-Time is considered to be a largely “finished” project. No major enhancements are planned. If using Java SE 8, please migrate to java.time (JSR-310).

在代码中,我利用了 java.time 类的 toString 方法生成 ISO 8601 格式(您要求的格式)这一事实。我发现秒上的额外小数不太可能造成任何问题,因为标准允许这样做。

Joda Time

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

示例输出:

2018-08-04T12:50:36.071+02:00

new DateTime() 仅具有毫秒精度。您始终会得到准确的秒数小数点后 3 位。

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

java.time 在 Java 6 和 7 上也能很好地工作,在所有条件相同的情况下,我推荐它而不是 Joda-Time。仅当被迫使用 Java 5 时,Joda-Time 无疑是不错的选择。

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,内置了 java.time。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,即现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保使用子包从 org. Threeten.bp 导入日期和时间类。

您的代码出了什么问题?

您的代码可以在没有错误迹象的情况下进行编译,但在运行时会发出java.lang.IllegalArgumentException:无法将给定对象格式化为日期。这是因为 SimpleDateFormat 无法格式化 Joda-Time DateTime 对象。我们当然希望在编译时报告这一点。但除了 SimpleDateFormat.format(Date) 之外,还有一个继承自 Format 的重写 format(Object)。它适用于格式化DateNumber(自纪元以来的毫秒数)。此方法是编译器在您传递 DateTime 时选择的方法。这就是为什么没有编译时错误消息的原因。

提示:如果您无法立即理解错误消息,请将其粘贴到搜索引擎中。它通常会引导您找到解释和解决方案。在这种情况下也是如此。

链接

关于java - 将 6 个月前的日期转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com