【问题标题】:How to correctly work with dates on Android如何在 Android 上正确处理日期
【发布时间】:2021-10-26 21:36:09
【问题描述】:

我正在使用 Kotlin 开发一个 Android 项目,我们需要对来自设备和后端的日期执行验证。到目前为止,我们一直在使用 Date 类来表示日期,使用 SimpleDateFormat 类来解析字符串和格式化日期,使用 Calendar 类来对日期执行操作,例如从 x 天前获取日期等等。我遇到了一些资源,指出使用日期的正确方法是使用 java.time 包(诸如 LocalDateTime、LocalTime 等类)。我有兴趣确切知道使用日期的正确方法(从解析到格式化)以及是否需要考虑时区。我见过类似的问题,但没有一个能真正概括我想知道的内容。

【问题讨论】:

  • 使用过时的类Date、SimpleDateFormat 和Calendar 并不是完全错误的。对于你自己和那些不得不在你之后维护你的代码的人来说,这“只是”一堆不必要的麻烦。是的,我完全同意那些推荐 java.time,现代 Java 日期和时间 API 的人。使用起来非常好用,而且在许多情况下提供的代码更易于阅读和理解。
  • 有 两个 Date 类:java.sql.Date & java.util.Date。你永远不应该使用它们中的任何一个。两者都被 JSR 310 中定义的 java.time 类所取代:分别为 LocalDate 和 Instant。

标签: java android date kotlin java-time


【解决方案1】:

正确的工作方式

要正确处理日期和时间,您需要了解日期和时间是什么以及它们在用户的现实生活中的行为方式。正确工作与使用这个或其他库类无关。根据您从事的工作,您需要了解闰年和/或儒略历、公历和预历公历和/或许多不同的阳历和阴历系统。

要正确处理时间,几乎没有办法避免考虑时区。对于时区的介绍,我推荐我在底部链接的视频。它很有趣,并且很好地解释了基础知识。

推荐使用的库类

绝对推荐使用现代 Java 日期和时间 API java.time 来处理日期和时间。与 Java 1.0 和 1.1 中过时的日期和时间类相比,一些区别是:

  • 旧的类假装有些事情很简单,实际上并不简单,一些程序员没有意识到正确日期和时间处理的复杂性,并在他们的代码中留下未被检测到的错误。在许多情况下,现代类迫使程序员决定我们想要什么,为无意错误留下的空间要小得多。我们必须决定是否需要日期或时间或两者,我们想要哪个时区等等。
  • 在同一条线上,旧课程假装日期和时间相同,可以考虑有或没有时区,这是不正确的。相信它会在极端情况下导致各种错误。使用 java.time 您需要在 LocalDate、Instant、ZonedDateTime 和许多其他日期时间类之间进行选择,一开始可能会觉得很麻烦,但这会使您的代码更清晰并提高它的机会也正确。
  • 在许多情况下,旧类接受垃圾输入/参数,再次允许明显的错误未被检测到。现代类在验证方面做得更好。
  • 旧的类通常不是线程安全的。现代的是。

链接

【讨论】:

  • 我一直在犹豫是否要使用 java.time,但您的回答确实帮助我下定了决心。似乎 java.time 类涉及更多工作,但在处理日期和时间时它肯定会有所帮助。并感谢所有参考。
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多