【发布时间】:2016-05-19 23:34:40
【问题描述】:
Java 8 中有一整套日期类:
-
java.time.LocalDateTime; -
java.time.ZonedDateTime; -
java.time.Instant; -
java.time.OffsetDateTime; -
java.sql.Timestamp; -
java.util.Date。
我已经通过了他们的 JavaDocs 并注意到所有这些类都包含我需要的所有方法。因此,目前,我可以随机选择它们。但我想这其中有 6 个单独的类并且每个类都专用于特定目的是有原因的。
技术信息和要求:
- 输入是
String,它被转换为这些日期格式之一。 - 我不需要显示时区,但是当我比较两个日期时,能够正确比较纽约和巴黎的时间很重要。
- 精确级别为秒,无需使用毫秒。
- 所需的操作:
- 查找最大/最小日期;
- 按日期排序对象;
- 计算日期和时间段(两个日期之间的差异);
- 将对象插入 MongoDB 并按日期从数据库中检索它们(例如,特定日期之后的所有对象)。
我的问题:
- 从性能和可维护性的角度来看,为了在这四个选项中选择最佳格式,我应该牢记哪些方面?
- 我有什么理由不应该避免这些日期课程吗?
【问题讨论】:
-
恐怕这太宽泛了。您应该从阅读这些类的 Javadoc 开始。对此没有好的答案。
-
不要在 Java 8 中使用 java.util.Date。
-
如果您不打算使用 JDBC,我显然不会使用 java.sql.Timestamp。 java.util.Date 是 Java 8 之前的版本,并且以笨重着称。我会选择 Java 8 的 LocalDateTime。
-
@user1803551,这个问题已经被技术细节缩小和丰富了。
-
@MikeB。这可能会提供信息:docs.oracle.com/javase/tutorial/datetime/iso/overview.html - 重要的是您试图描述的基础数据。您的字符串只有日期和时间信息 - 它本质上是 LocalDateTime。但是你也提到了时区。当你得到那个字符串时,你知道它在哪个时区吗?另请注意,mongodb 将日期表示为自纪元以来的毫秒数 - Java 中最接近的表示形式是 Instant。您应该提供更多关于这些日期实际代表的背景信息。
标签: java date datetime timestamp java-8