【问题标题】:Strip off seconds from joda DateTime java从 joda DateTime java 中删除秒数
【发布时间】:2021-09-06 21:55:50
【问题描述】:

我有一个org.joda.time.DateTime 对象,它的时区是“亚洲/上海”(即+08:00),它的日期时间值是“2021-06-22T22:30:25+08:00”。我想在 不更改其原始时区的情况下从中删除秒数。预期值为“2021-06-22T22:30:00+08:00”。我该怎么做?

【问题讨论】:

  • 如果您认为自己的答案最准确地描述了对您的帮助,请随时接受(您可以随时更改接受哪个答案,只是我认为您不能接受自己的答案直到发布后 12 小时,现在已经过去)。

标签: java timezone jodatime


【解决方案1】:

约会时间?现在是 2021 年。只需使用 java.time。这是 jodatime,有一些细微的更新,并融入了核心 Java 库。

无论如何,无论我们谈论的是 jodatime 还是 java.time,数据结构都是不可变的,因此您想要的都是不可能的。你不能剥离任何东西。您可以做的是创建新的 DateTime 对象。

myOriginalObject.withSecondsOfMinute(0) 完成这项工作。返回具有 00 秒数的新 DT 实例。

【讨论】:

  • java.time 是个好主意。除非您确实想保留任何可能存在的秒数,否则我更喜欢myOriginalObject.truncatedTo(ChronoUnit.MINUTES)
【解决方案2】:
    DateTimeZone zone = DateTimeZone.forID("Asia/Shanghai");
    DateTime dt = new DateTime(2021, 6, 22, 22, 30, 25, zone);

    dt = dt.withMillisOfSecond(0).withSecondOfMinute(0);
    
    System.out.println(dt);
    System.out.println("Is time zone changed? It is now " + dt.getZone());

输出:

2021-06-22T22:30:00.000+08:00
Is time zone changed? It is now Asia/Shanghai

额外引述:Joda-Time 主页说:

请注意,Joda-Time 被认为是一个基本上“已完成”的项目。 没有计划进行重大改进。如果使用 Java SE 8,请迁移 到java.time (JSR-310)。

链接:Joda-Time home

【讨论】:

    【解决方案3】:

    参考 Ole V.V.和rzwitserloot的答案,以下解决了我的问题

    dateTime = new DateTime(dateTime).withMillisOfSecond(0).withSecondOfMinute(0);
    

    dateTime 的类型为 org.joda.time.DateTime

    【讨论】:

    • 感谢您发布您的解决方案。你不需要new,它几乎不会给你带来任何东西。
    猜你喜欢
    • 2017-08-21
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2021-05-26
    • 2014-07-28
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多