2014-10-08 28 views
3

在大多数编程语言中,典型的Date数据类型是一个表示“准确的时刻”的Unix时间戳。是否有替代的“Date”数据类型比UTC更“模糊”?

但我想知道是否有更多“模棱两可”的结构,更接近地表示人类对日期的感知。

例如,假设我想表示特定年份(2000)或特定月份(January 2000)或特定日期(January 1, 2000)?
我可以将它作为Unix时间戳存储,这将是1/1/2000 12:00 AM GMT
但计算机根据当地的时区解释时间戳,所以我的电脑会显示12/31/1999 5:00 PM PDT,每台计算机会以不同的方式解释它。

由于Unix的时间戳似乎是在时间确切时刻的标准,我只是想知道是否有在时间暧昧时刻,任何类型的标准。
如果没有标准,我很乐意阅读处理这些场景的任何特定实现(,任何语言)。

回答

2

是的,有你会遇到这么多地方:

  • ISO-8601标准,如YYYY-MM-DD格式的字符串。例如"2014-10-08"是十月的第8天,2014年

  • 在.NET语言,如C#中,DateTime类型是日期和时间,但它不一定绑定到一个特定的时刻。这取决于名为Kind的内部属性,它可以是Utc,LocalUnspecified。如果没有指定,那么它只是一个日期和时间,不涉及任何时区。它仍然有一个时间组件。

  • 在.NET库Noda Time中,LocalDate类型是没有时间或时区的纯日期。同样,LocalDateTime是没有时区的日期和时间类型。

  • 在Java库Joda Time中,LocalDate类型是没有时间或时区的纯日期。同样,LocalDateTime是没有时区的日期和时间类型。您还会在新的java.time API in Java 8中找到这些类型。

  • 在C或C++中,tm结构代表日历日期和时间,不考虑时区。它在标准库中,以及具有您在问题中描述的行为的t_time结构。

  • 在Python中,date对象表示没有时间或时区的日期。 datetime对象表示日期和时间,可选时区。当没有时区信息存在时,Python将它们称为幼稚,并且当提供时区时知道

  • 在许多数据库中,存在日期和时间的数据类型,或仅用于日期的数据类型,而不考虑时区。我不会列出所有数据库,但考虑Microsoft SQL Server具有单独的datetimedate类型。

我敢肯定有很多人,但是他们不一定存在所有语言。例如,PHP有一个DateTime类,但它是时区感知的,我不相信一个类不存在(或者我无法找到它)。 JavaScript是另一个例子,因为它的Date对象实际上是绑定到基于UTC的时间戳的日期和时间对象。

顺便说一句,这些类型(以及更多)在Pluralsight课程中涵盖,Date and Time Fundamentals,其中我是作者。你不妨检查一下。

+0

令人惊叹的答案...我真的觉得不好意思,因为没有意识到有这么多的选择。 – 2014-10-09 05:30:07

+0

我很好奇,这些日期类型通常如何序列化他们的数据?看起来ISO字符串将是一个简单的选择,但我想知道是否有更优雅的东西。 (我正在为JavaScript解决方案进行头脑风暴) – 2014-10-09 05:53:23

+0

ISO8601始终是序列化的最佳选择。更“优雅”的意思是什么? – 2014-10-09 15:18:37

相关问题