UNIX时间戳是存储时间戳的最佳方法吗?
我总是对所有内容都使用unix时间戳,但想知道是否有更好的方法。
您使用什么来存储时间戳?为什么?
Rich Bradshaw asked 2020-01-08T16:24:26Z
9个解决方案
89 votes
无论您选择存储时间戳,避免区域解释问题和时间偏移问题都是很重要的。 Unix时间戳的解释不受区域限制,并且从相同的时间点进行计算,而不管时区如何-这些都是好东西。
当心将时间戳存储为模棱两可的字符串(例如01/02/2008),因为根据地区可以将时间戳解释为2008年1月2日或2008年2月1日。
当存储小时/分钟/秒时,重要的是要知道“哪个”小时/分钟/秒被指定。 您可以通过包括时区信息(Unix时间戳不需要,因为它被假定为UTC)来做到这一点。
但是,请注意,Unix时间戳不能唯一地表示时间上的某些瞬间:当UTC中有a秒时,Unix时间戳不会改变,因此,UTC的第二天23:59:60和第二天的00:00:00具有相同的时间 Unix表示形式。 因此,如果您确实需要一秒或更佳的分辨率,请考虑另一种格式。
如果您希望使用比Unix时间戳更可读的格式来存储,请考虑使用ISO 8601。
一种使事情变得简单明了的技术是将日期存储为UTC,并且在向用户显示日期时仅应用时区或DST偏移量。
J c answered 2020-01-08T16:25:27Z
26 votes
如果您要存储日志文件,请对pete的热爱使之成为人类可读和可按词法排序的东西。
以2008-10-07 09:47:02为例。
Ryan answered 2020-01-08T16:25:52Z
14 votes
32位Unix时间戳记将在几年后(2038年1月)溢出,因此可能需要考虑。 我通常在SQL中使用DATETIME格式,即YYYY-MM-DD HH:MM:SS,其时间为24小时制。 我尝试以相同的格式输出到文件,只是为了让我的生活更轻松。
Thomas Owens answered 2020-01-08T16:26:12Z
6 votes
您需要存储什么时代以及什么分辨率?如果您需要微秒,或者是石器时代的日期,那么time_t可能不是最佳选择。对于一般业务而言,它相当不错(假设为64位)
Martin Beckett answered 2020-01-08T16:26:32Z
4 votes
这取决于您需要的时间戳。
Unix时间戳不能表示2008-12-31T23:59:59Z之后1秒的时间。如果您使用unix时间戳记执行'2009-01-01T09:00:00'-'2008-12-31T09:00:00',则结果不正确:这两个日期之间会有a秒,并且它们会分开 减少了86401秒(不是unix时间戳会告诉您的86400)。
除此之外,还有其他响应者所说的,是的-Unix时间戳是必经之路:)
pmg answered 2020-01-08T16:27:02Z
4 votes
在数据库上加时间戳记不是一个好主意,因为它们没有考虑夏令时或当前本地时间。 在MySQL上,最好将其存储为时间,然后使用MySQL日期和时间函数检索所需的部分,或与其他日期进行比较。
Marius answered 2020-01-08T16:27:22Z
2 votes
如果我需要亚秒级精度,则为timeval样式(time_t +微秒),否则为time_t。 您可以使用64位整数值存储time_t * 1000000 + usec,并且防溢出超过+/- 292,000年。
Bklyn answered 2020-01-08T16:27:43Z
1 votes
UNIX Timestamp 32位问题对于在2038年以后输入将来日期的用户来说似乎很烦人。
对MySQL使用DATETIME序列,或将日期存储为BIGINT(8)无符号(最大:18位数)或FLOAT,以便可以输入大数字。 然后,您将无法使用PHP的date()函数,因为它仅允许使用整数作为参数(受32位系统限制)。
我发现的解决方案是使用PHP 5.2.0函数。 这是DateTime PHP解决方案。
无需更改UNIX_TIMESTAMP格式。 只要您将BIGINT(8)取消签名作为时间戳的MySQL存储。 您将不再受32位系统的限制。
Dexter answered 2020-01-08T16:28:17Z
0 votes
时间戳基本上是:
一个独特的时间点
由于时间点具有无限的分辨率,因此选择时间戳记格式的重要之处在于:分辨率是否足够?
Unix时间仅以秒为单位。
Ext 4有纳秒
Java有十亿分之一秒
对于我拥有的大多数应用程序,纳秒就足够了。 因此,到目前为止,Java Timestamp对我而言具有正确的分辨率。
Andre Bossard answered 2020-01-08T16:29:03Z