有没有另类"日期"数据类型更多"含糊不清"比UTC?

时间:2014-10-08 19:39:58

标签: date datetime

在大多数编程语言中,典型的Date数据类型是一个Unix时间戳,表示"准确的时刻"。

但是我想知道是否有更多"含糊不清的" Date结构,更接近地表示人类对日期的看法。

例如,假设我想代表特定年份(2000),或特定月份(January 2000)或特定日期(January 1, 2000)? 我可以将它存储为Unix时间戳,它是1/1/2000 12:00 AM GMT 但计算机根据其本地时区解释时间戳,因此我的计算机将显示12/31/1999 5:00 PM PDT,并且每台计算机都会以不同方式对其进行解释。

由于Unix时间戳似乎是完全时刻的标准,我只是想知道模棱两可是否存在任何标准时刻。
如果不是标准,我很乐意阅读处理这些方案的任何特定实现(任何语言)。

1 个答案:

答案 0 :(得分:2)

是的,你会遇到很多地方:

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

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

  • 在.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会将它们称为 naive ,并且在提供时区时,识别

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

我确信还有很多其他的,但是所有语言并不一定存在。例如,PHP有一个DateTime类,但它是时区可识别的,我不相信一个类不存在(或者我无论如何都找不到它)。 JavaScript是另一个例子,因为它的Date对象实际上是一个绑定到基于UTC的时间戳的日期和时间对象。

顺便说一句,这些类型(以及更多)包含在Pluralsight课程Date and Time Fundamentals中,我是作者。您可能希望查看它。