【问题标题】:Joda LocalDate To LocalDateTime [duplicate]Joda LocalDate 到 LocalDateTime [重复]
【发布时间】:2015-05-30 02:37:03
【问题描述】:

我正在尝试将Joda LocalDate 转换为Joda LocalDateTime,因为我正在使用toLocalDateTime(LocalTime.MIDNIGHT) 方法,目前它正在工作 例如:对于给定的 joda Localdate 2025-02-28,我得到了预期的 joda LocalDateTime 2025-02-28T00:00:00.000,但我担心的是,这种方法在所有情况下是否都能正常工作。比如during dayLight savingtime zone anomalies..etc..

更新:我对这个问题做了一个小研究,这里是

toLocalDateTime(LocalTime time) Documentation 表示:将 LocalDate 对象转换为 LocalDateTime 并使用 LocalTime 填充缺失的字段。

当我用LocalTime.MIDNIGHT 初始化LocalTime 时,从here LocalTime.MIDNIGHT 是一个初始化为new LocalTime(0, 0, 0, 0); 的静态最终字段,您可以看到这是一个使用ISOChronology getInstanceUTC() 硬编码为零值的时间值,所以我想我会毫无问题地获得所需的输出。

【问题讨论】:

  • 您似乎在询问 Joda 库中是否可能存在错误。我想一切皆有可能,但我想说它可能已经过测试,比你可能为自己写的任何东西都要好。
  • 仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。见Tutorial by Oraclejava.time.LocalDate.parse( "2025-02-28" ).atStartOfDay()

标签: java jodatime


【解决方案1】:

documentation,我们知道

  • LocalDate 是一个不可变的日期时间类,表示没有时区的日期

  • LocalDateTime 是一个不可修改的日期时间类,表示没有时区的日期时间

  • 在内部,LocalDateTime 使用基于单个毫秒的值来表示本地日期时间。此值仅在内部使用,不会暴露给应用程序。

  • LocalDate 的计算是使用 Chronology 执行的。此年表将在内部设置为所有计算都使用 UTC 时区

我们也知道LocalDate类的toLocalDateTime方法的实现类似于this

public LocalDateTime toLocalDateTime(LocalTime time) {
   if (time == null) {
      throw new IllegalArgumentException("The time must not be null");
   }
   if (getChronology() != time.getChronology()) {
      throw new IllegalArgumentException("The chronology of the time does not match");
   }
   long localMillis = getLocalMillis() + time.getLocalMillis();
   return new LocalDateTime(localMillis, getChronology());
}

考虑到UTC has no Daylight saving time,我们可以得出结论,您不必担心使用toLocalDateTime 方法的夏令时问题或时区异常,因为此方法不处理时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2013-03-04
    • 2015-08-04
    • 1970-01-01
    • 2021-11-26
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多