我已阅读 date 命令的手册页,但没有将 UNIX 时间转换为字符串时间的选项。我发现一些网站是这么说的:
date -d @1343715322
没有像@
手册和信息页面中那样的选项。有人可以解释一下吗?
答案1
您通常不会在手册页中找到这样的详细信息。
检查info date
,您将在“日期输入格式”部分找到它。
答案2
GNU 日期手册中有这样的内容:http://www.gnu.org/software/coreutils/manual/coreutils.html#Seconds-since-the-Epoch。 coreutils 信息页面中有相同的解释。
如果在数字前面加上“@”,则它表示以秒数表示的内部时间戳。该数字可以包含内部小数点(“.”或“,”);内部表示不支持的任何多余精度都会被截断为负无穷大。此类数字不能与任何其他日期项组合,因为它指定完整的时间戳。
在内部,计算机时间表示为自纪元(一个明确定义的时间点)以来的秒数。在 GNU 和 POSIX 系统上,纪元是 1970-01-01 00:00:00 utc,因此“@0”代表这个时间,“@1”代表 1970-01-01 00:00:01 utc,依此类推。 GNU 和大多数其他 POSIX 兼容系统支持诸如 POSIX 扩展的时间,使用负计数,因此“@-1”代表 1969-12-31 23:59:59 utc。
传统的 Unix 系统使用 32 位二进制补码整数来计算秒数,可以表示从 1901-12-13 20:45:52 到 2038-01-19 03:14:07 utc 的时间。更现代的系统使用带有纳秒子计数的 64 位秒计数,并且可以以 1 纳秒的分辨率表示宇宙已知生命周期中的所有时间。
在大多数主机上,这些计数忽略了闰秒的存在。例如,在大多数主机上,“@915148799”代表 1998-12-31 23:59:59 utc,“@915148800”代表 1999-01-01 00:00:00 utc,并且无法代表中间的跳跃第二次 1998-12-31 23:59:60 世界标准时间