What datetime class should I use for my case classes?

时间:2016-07-11 22:30:53

标签: scala datetime playframework

I have case classes that may be used for representing models that originate from either a database table or API object.

Should I use joda or java.util.date or java.sql.date or?

This is for a playframework app, and I will use these models to display the datetime on the UI side of things where I will convert the date to the current users timezone also.

I'm just really confused.

4 个答案:

答案 0 :(得分:2)

同意the Answer by mkurz ...

java.time

{8}和java.util.Date及其相关类已被Java 8及更高版本中内置的java.time框架所取代。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

搜索Stack Overflow以了解更多信息(阅读上面链接的Oracle Tutorial之后)。已发布了许多示例和讨论。

基本概念

  • 日期时间处理非常棘手。把你的直觉留在门口。
  • 字符串不是日期时间值;它们是日期时间值的表示。专注于使用对象,而不是字符串。
  • 您可以使用仅限日期,仅限时间或日期时间。
  • 知道offset-from-UTC只是一个小时/分钟/秒而time zone是超集,添加了处理夏令时(DST)等异常的规则。使用java.sql.Date作为一个,OffsetDateTime作为另一个。
  • ISO 8601标准在解析时提供了合理的格式。生成字符串以表示日期时间值。
  • “Local ...”类型表示“没有特定的地点”。在指定特定时区的上下文之前,这些没有意义,不是时间轴上的点。
  • 您在媒体中常见的3-4个字母缩写,例如ZonedDateTimeEST 时区,不是标准化的,并且不是唯一的(! )。 Proper time zone namesIST
  • 将时区应用于用户,但您的大多数业务逻辑,数据存储和数据交换应采用UTC(continent/region类)。

提示

  • 编程时,请忘记您自己的当地时区。在UTC中思考。
  • 学习阅读&写24小时制。

答案 1 :(得分:1)

您正在寻找Java 8中引入的java.time.ZonedDateTime,并且应该用于表示具有时区的日期和时间相关信息。您可以使用2016-05-30T00:23:27.070Z保存值。没有必要再像joda那样使用第三方库了(可能在其他情况下,但不在你的网站中)

(不要使用java.util.Date - 大部分方法都已被弃用,原因很多)

答案 2 :(得分:0)

I would recommend http://www.joda.org/joda-time/quickstart.html

It works really nicely with play's json formatters and comes with a ton of helpers.

答案 3 :(得分:0)

正如博主所说: “ Scala没有日期时间包,但是我们可以使用Java提供的那些。

Java 8提供了更好的数据/时间API,因此不再需要像Joda-Time这样的第三方库。”

这是博客: https://www.hackingnote.com/en/scala/datetime

这将对您有所帮助。