在大多数编程语言中,典型的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时间戳似乎是完全时刻的标准,我只是想知道模棱两可是否存在任何标准时刻。
如果不是标准,我很乐意阅读处理这些方案的任何特定实现(任何语言)。
答案 0 :(得分:2)
是的,你会遇到很多地方:
在ISO-8601标准中,作为YYYY-MM-DD格式的字符串。例如,"2014-10-08"
是2014年10月的第8天。
在.NET语言中,例如C#,DateTime
类型是日期和时间,但它不一定与特定时刻绑定。这取决于名为Kind
的内部属性,可以是Utc
,Local
或Unspecified
。如果未指定,那么它只是一个日期和时间,不参考任何时区。它仍然有一个时间组件。
在.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 ,并且在提供时区时,识别。
在许多数据库中,有日期和时间的数据类型,或者仅限日期,不考虑时区。我不会列出所有数据库,但请考虑具有单独的datetime
和date
类型的Microsoft SQL Server。
我确信还有很多其他的,但是所有语言并不一定存在。例如,PHP有一个DateTime
类,但它是时区可识别的,我不相信一个类不存在(或者我无论如何都找不到它)。 JavaScript是另一个例子,因为它的Date
对象实际上是一个绑定到基于UTC的时间戳的日期和时间对象。
顺便说一句,这些类型(以及更多)包含在Pluralsight课程Date and Time Fundamentals中,我是作者。您可能希望查看它。