我总是使用unix timestamps的一切,但我想,如果有一个更好的办法。

你用什么储存的时间戳,为什么?

有帮助吗?

解决方案

但是,您选择存储时间戳,避免区域解释问题和时间偏移问题非常重要。无论区域如何,Unix时间戳都被解释为相同,并且无论时区如何都是从同一时间点计算出来的 - 这些都是好事。

请注意将时间戳存储为不明确的字符串,例如01/02/2008,因为这可以解释为2008年1月2日或2008年2月1日,具体取决于区域设置。

当存储小时/分钟/秒时,重要的是知道“哪个”或“哪个”。正在指定小时/分钟/秒。您可以通过包含时区信息(Unix时间戳不需要,因为它假定为UTC)来完成此操作。

但是,请注意,Unix时间戳不能唯一地代表某些时刻:当UTC中存在闰秒时,Unix时间戳不会改变,因此UTC时间23:59:60和第二天00:00:00具有相同的Unix表示。因此,如果您真的需要一秒或更好的分辨率,请考虑另一种格式。

如果您更喜欢比Unix时间戳更易于阅读的人类可读格式,请考虑 ISO 8601

一种有助于保持直观的技术是将日期存储为UTC,并且仅在向用户显示日期时应用时区或DST偏移。

其他提示

如果你要存储一个日志文件,请为皮特的爱而使它成为人类可读和词法排序的东西。

2008-10-07 09:47:02例如。

32位Unix时间戳将在几年内(2038年1月)溢出,以便是一个考虑因素。我通常在SQL中使用DATETIME格式,即YYYY-MM-DD HH:MM:SS,时间为24小时制。我尝试以相同的格式输出文件,只是为了让我的生活更轻松。

你需要存储什么时代以及解决方案? 如果你需要微秒,或石器时代的日期time_t可能不是最好的。 出于一般商业目的,它非常好(假设是64位)

这取决于您需要的时间戳。

unix时间戳不能代表2008-12-31T23:59:59Z后1秒的时间。 如果你使用unix时间戳执行'2009-01-01T09:00:00' - '2008-12-31T09:00:00'结果不正确:这两个日期之间会有一个闰秒并且它们是分开的86401秒(不是86400,因为unix时间戳会告诉你)。

除此之外以及其他响应者所说的是,是 - unix时间戳是要走的路:)

时间戳对数据库不是一个好主意,因为它们不会考虑夏令时或当前的本地时间。在MySQL上最好将其存储为时间,然后使用 MySQL日期和时间函数来检索您想要的部分,或与其他日期进行比较。

timeval-style(time_t + microseconds)如果我需要亚秒精度,否则只需要time_t。您可以使用64位整数值来存储time_t * 1000000 + usec,并且您可以防止溢出超过+/- 292,000年。

UNIX时间戳32位问题似乎对于在2038 +中输入未来日期的用户来说非常烦人。

使用MySQL的DATETIME序列,或将日期存储为BIGINT(8)无符号(最大值:18 quintillion)或FLOAT,以便输入大数字。然后你不能使用PHP的date()函数,因为它只允许整数作为参数(受32位系统限制)。

我找到的解决方案是使用 PHP 5.2.0 功能。 这是DateTime PHP解决方案

无需更改UNIX_TIMESTAMP格式。只要您将BIGINT(8)无符号作为时间戳的MySQL存储空间。您将不再受32位系统的限制。

时间戳是bascially:

  • 一个不同的时间点

并且作为一个时间点上有无尽的决议,最重要的事情上选择一个时间戳格式是:有足够的决议?

对于大多数应用程序,我有,毫微秒是不够的。所以Java时间戳有权决议对我这么远。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top