所以我读了这个关于与Azure DocumentDb中的日期时间一起工作的非常有趣的博客。问题是,目前,Azure DocumentDb不支持日期时间字段的范围搜索。这是因为DocumentDb是基于json的,没有日期时间类型,因此通常将其放在xml格式的字符串中。
(显然Mongo没有这个问题,它的bson格式添加了日期时间类型(除其他外))
无论如何,本文描述了在一个时代(unix)中以json格式存储日期时间,实质上是将日期时间存储为01-01-1970年间的秒数。时代的一个问题是,它没有考虑到闰秒,但我现在可以接受。
我的问题是,我也想以这样的格式存储出生日期。现在,我可以将01-01-1900作为开始日期,并将从该日期起的天数存储在int中。虽然我很肯定这会很好,但感觉时代是一个很好的概念,但是生日的时候我觉得我在建立我自己的惯例,这是我通常喜欢避免的事情。
是否有将日期存储标准化为数字的既定标准?哪一天应该是基准日期?
发布于 2015-08-13 14:18:58
首先,更新: DocumentDB现在支持字符串和数字的范围索引。您必须正确设置索引才能正常工作。
现在,给你一个推荐。我已经成功地将ISO-8601时间戳存储为字符串。这是DocumentDB SDK用于处理DateTime的默认格式,因此它比转换为整数要少。
ISO-8601日期/时间字符串具有几个符合您需要的属性。
我已经写过这种方法,这里。
发布于 2015-08-13 04:48:46
Teo的回答是正确的,除了我认为它是“可靠的”之外,数十亿的Microsoft、LibreOffice和Lotus1-2-3电子表格的使用时间可能远远超过Unix时间的使用。或者苹果的可可设备和电脑有了自己的时代。
请注意,几十个不同的时代已被各种计算机环境所使用。Unix时间远非独处,甚至不是主导地位。
也要注意,没有确切的Unix时间这样的东西。变化包括使用整秒、毫秒、微秒或纳秒。
在可能的情况下,使用日期-时间精明的数据类型。一定要研究和实验,以清楚地了解它的行为。
在不可能使用数据类型的情况下,回退到使用各种ISO 8601格式的字符串。这些标准格式中有些是按字母顺序排序的,特别是对于仅用于日期的值:YYYY。
在我所知道的每一个日期时间跟踪系统中,都忽略了闰秒。他们的目的是让我们每小时的时钟与日历一起摇摆,因此为了商业目的,闰秒在某种意义上是被忽略的。
约会时间的工作是令人惊讶的棘手和滑溜溜的业务。搜索StackOverflow以发现许多问题。尽量避免使用自己的解决方案。特别是对于C#,请查看野田时间库。
发布于 2015-08-12 20:10:07
根据我的经验,我没有遇到比UNIX时代更“既定”的标准。尽管如此,以前已经讨论过时间存储的一些体系结构/技术方面:Java和MySQL中的时间戳和时区转换。
我想问你为什么要冒险使用你自己的约定?这是一个风险,因为:如果有一段时间你想在你的日数中增加时间,也许你可以根据人出生当天的具体时间来订购他们。这个问题可以扩展到:如果某个时候您想要度量更一般或更细粒度的时刻,那么您将不得不将整个特性(可能贯穿应用程序的许多层)转换为更通用的机制/约定。另一个(类似的)问题是:你总是为数据库中的人测量一生中一次的事件,还是他们能够创建新的、无限制的事件?随着事件数量的增加,碰撞的风险也会增加,一天的计数将不像以秒或毫秒为单位的时间戳那样合适。
UNIX时间基本上是无处不在的,在大多数编程语言中,您都有获得它的特殊方法。在我的项目中,我将始终支持和实现的计时体系结构是:http://www.currentmillis.com/tutorials/system-currentTimeMillis.html。

正如我在回答上述问题时所指出的,自UNIX时代以来将时间存储为毫秒的优点是:
因为你提到了C#,所以我想到了DateTime.MinValue。这将基本上是00年(午夜,1月1日)。
此外,这将是一些代码,可以让您从您选择的参考日期(无论是什么)获得millis,但请注意,1900年仍然与.NET的‘时代’(DateTime.MinValue)不同。
// Unix Epoch
(DateTime.UtcNow - new DateTime (1970, 1, 1)).TotalMilliseconds
// NTP Epoch
(DateTime.UtcNow - new DateTime (1900, 1, 1)).TotalMillisecondshttps://stackoverflow.com/questions/31973710
复制相似问题