Date 有没有其他选择;日期“;数据类型,该数据类型更;模棱两可;而不是UTC?

Date 有没有其他选择;日期“;数据类型,该数据类型更;模棱两可;而不是UTC?,date,datetime,Date,Datetime,在大多数编程语言中,典型的Date数据类型是一个Unix时间戳,表示“精确的时间时刻” 但我想知道是否有一种更“模糊”的日期结构,它更能代表人类对日期的感知 例如,假设我想表示一个特定的年份(2000),或一个特定的月份(2000年1月),或一个特定的日子(2000年1月1日)? 我可以将其存储为Unix时间戳,即1/1/2000 GMT凌晨12:00 但是计算机根据其本地时区解释时间戳,因此我的计算机将显示12/31/1999 PDT下午5:00,并且每台计算机将对其进行不同的解释 由于Uni

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

但我想知道是否有一种更“模糊”的日期结构,它更能代表人类对日期的感知

例如,假设我想表示一个特定的年份(
2000
),或一个特定的月份(
2000年1月
),或一个特定的日子(
2000年1月1日
)?
我可以将其存储为Unix时间戳,即
1/1/2000 GMT凌晨12:00

但是计算机根据其本地时区解释时间戳,因此我的计算机将显示
12/31/1999 PDT下午5:00
,并且每台计算机将对其进行不同的解释

由于Unix时间戳似乎是时间上精确时刻的标准,我想知道是否有时间上模糊时刻的标准。

如果没有标准,我很乐意阅读处理这些场景的任何特定实现(任何语言的

是的,在很多地方你都会遇到这种情况:

  • 在标准中,作为YYYY-MM-DD格式的字符串。例如
    “2014-10-08”
    是2014年10月8日

  • 在.NET语言(如C#)中,类型是日期和时间,但不一定绑定到特定的时间点。这取决于名为
    Kind
    的内部属性,该属性可以是
    Utc
    Local
    ,也可以是
    Unspecified
    。如果未指定,则它只是一个日期和时间,不涉及任何时区。但它仍然有一个时间成分

  • 在.NET库中,类型为纯日期,没有时间或时区。类似地,是没有时区的日期和时间类型

  • 在Java库中,类型是没有时间或时区的纯日期。类似地,是没有时区的日期和时间类型。您还可以在新的中找到这些类型

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

  • 在Python中,对象表示没有时间或时区的日期。该对象表示日期和时间,带有可选时区。当不存在时区信息时,Python称之为naive,当提供时区时,Python称之为aware

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

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


顺便说一下,这些类型(以及更多)都包含在Pluralsight课程中,我是该课程的作者。您可能希望查看它。

惊人的答案。。。我真的为没有意识到有这么多选项而感到难过。我很好奇,这些日期类型通常是如何序列化它们的数据的?似乎ISO字符串是一个简单的选择,但我想知道是否还有更优雅的。(我正在集思广益寻找JavaScript解决方案)ISO8601始终是序列化的最佳选择。“优雅”是什么意思?我认为ISO8601字符串将使用10-20个字节,而Unix时间戳是4个字节。但我想这只是一个实现细节,ISO具有可读性的巨大优势。您也可以自己做一些事情,比如发送一个从一个时代开始的整数,但这同样会牺牲可读性。这可以用作仅日期对象的内部表示,但不一定用于序列化。