【问题标题】:update Joda DateTime object更新 Joda DateTime 对象
【发布时间】:2013-04-13 10:05:55
【问题描述】:

假设我有一个 Joda DateTime 对象,由以下模式表示 "MMM d, yyyy / HHmm"

有没有办法独立于两个字符串更新 DateTime“日部分”或“时间部分”?

例如:

DateTime aDateTime initial : JAN 1, 1970 / 2230

如果我有一个字符串aDayString="FEB 3, 1980" 和一个字符串aTimeString="1520"

  • 如何仅更新 aDateTime day(以获取 FEB 3, 1980 / 2230)?
  • 如何仅更新 aDateTime 时间(以获取 1970 年 1 月 1 日 / 1520 年)?

【问题讨论】:

  • 据我所知你不能。 DateTime 是不可变的,因此您必须基于原始 DateTime 对象创建一个新对象

标签: java datetime jodatime


【解决方案1】:

Joda 的 DateTime 对象是不可变的,因此就像 String 一样,当您更改一个值时,您将获得一个新实例。因此:

DateTime initial = new DateTime( 1970, 1, 1, 22, 30, 0 );
DateTime dayUpdated = initial.withDate( 1980, 2, 3 );
DateTime timeUpdated = initial.withTime( 15, 20, 0, 0 );
// At this point, initial still contains 1970-1-1, 22:30
//                dayUpdated is 1980-2-3 22:30
//                timeUpdated is 1970-1-1 15:20

如果您有大量此类更改要处理并希望减少垃圾收集器的负载,您可以使用MutableDateTime 来创建一个可以直接修改的初始实例。

MutableDateTime mutable = new MutableDateTime( 1970, 1, 1, 22, 30, 0 );
mutable.setDate( 1980, 2, 3 );
mutable.setTime( 15, 20, 0, 0 );
// at this point, mutable contains 1980-2-3 15:20

在大多数常见情况下,拥有不可变对象的可预测性胜过拥有可变实例的好处,因此我建议采用第一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多