【问题标题】:Using long timestamp or Joda Time使用长时间戳或 Joda Time
【发布时间】:2013-08-17 02:23:17
【问题描述】:

我有一个遗留的 Java 应用程序,它的性能瓶颈是由于使用了日历。由于 Calendar 是一个可变对象,因此我们每次获取它时都必须进行克隆。

public Calendar getCalendar() {
    return (Calendar)calendar.clone();
}

我们还发现,在我们的应用程序中,我们根本没有使用时区信息。我想知道,我们是否应该将代码重构为

public long getTimestamp() {
    return timestamp;
}

当我们需要进行日期/时间算术运算时,我们只会将时间戳转换为日历或 Joda DateTime。

或者为了防止不可预见的未来,我们应该使用Joda DateTime吗?

public DateTime getDateTime() {
    return dateTime;
}

【问题讨论】:

  • LocalDateTime 是适合使用的类,而不是 DateTime,如果您没有要存储的时区信息
  • @JodaStephen,我想知道将来我是否需要 TimeZone 信息,更改会便宜吗? (这就是为什么我犹豫使用纯“长”)。如果我只是不需要时区信息,我会选择使用“long”,并在需要算术或比较时使用 Java 日历。

标签: java jodatime


【解决方案1】:

一般来说,如果你不关心时区并且你必须存储很多时间戳,你最好将它们存储为 long-s。每个时间戳为 8 个字节。围绕“long”的所有面向对象的日期时间包装器每个时间戳将消耗至少 24 个字节。当您需要执行任何日期时间算术时 - 将您的长时间戳转换为 Joda DateTime(或 MutableDateTime)。它们都被实现为围绕“长”字段的包装器,因此从长创建它们非常便宜。

【讨论】:

  • 您的意思是long 对吗? long-s 是什么意思? (哦,我想你的意思是longs。)
【解决方案2】:

您绝对应该使用 JodaTime。确保您在 java.util.Date 中传递您的日期,这只是自 1970 年 1 月 1 日以来的 UTC 时间以来的很长的毫秒数。

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多