我想将纪元时间转换为人类可读的格式。我在网上搜索,发现一个
示例:date -d @1270787111
。
我重读了日期手册。
-d, --date=STRING 由 STRING 描述的显示时间,而不是“现在”
和
DATE STRING --date=STRING 大部分是免费的...
我对这种格式一无所知。我错过了什么吗?
您所指的同一“日期字符串”部分以以下句子结尾:
日期字符串格式比这里容易记录的要复杂,但在 info 文档中有完整的描述。
换句话说,您必须参考“信息”页面。您可以通过info date
在终端中输入来执行此操作,或者在线查看这些文档。例如,输入格式在这里得到了很好的描述。
那么为什么@
需要前缀date -d @1270787111
呢?@
手册页示例中提到的特定格式在 §28.8中进行了描述:
自纪元以来的 28.8 秒
如果您在数字前面加上
@', it represents an internal time stamp as a count of seconds. The number can contain an internal decimal point (either
.' 或“,”);内部表示不支持的任何超额精度都会被截断为负无穷大。这样的数字不能与任何其他日期项目组合,因为它指定了一个完整的时间戳。在内部,计算机时间表示为自一个纪元以来的秒数 - 一个明确定义的时间点。在 GNU 和 POSIX 系统上,纪元是 1970-01-01 00:00:00 UTC,所以
@0' represents this time,
@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' represents 1998-12-31 23:59:59 UTC,
@915148800' 表示 1999-01-01 00:00:00 UTC,并且无法表示中间的闰秒 1998-12-31 23:59:60 UTC。
日期可以通过自 1970 年以来的整数秒数输入,前缀为“@”。
所以这
date -d @1270787111
表示描述自纪元 (1970/01/01) 以来 1270787111 秒后的数据。
DATE STRING --date=STRING 是大多数自由格式的人类可读日期字符串,例如“Sun, 29 Feb 2004 16:21:42 -0800”或“2004-02-29 16:21:42”甚至“next周四”。日期字符串可能包含指示日历日期、时间、时区、星期几、相对时间、相对日期和数字的项目。空字符串表示一天的开始。日期字符串格式比这里容易记录的要复杂,但在 info 文档中有完整的描述。
从手册页底部
info coreutils 'date invocation'
应该给你你需要的信息
日期输入格式
- 通用日期语法:: 通用规则
- 日历日期项目::1994 年 12 月 19 日
- 时间项目:: 9:20 PM
- 时区项目:: EST, PDT, GMT
- 星期几项目:: 星期一和其他
- 日期字符串中的相关项:: 下周二,2 年前
- 日期字符串中的纯数字:: 19931219, 1440
- 纪元以来的秒数:: @1078100502
- 指定时区规则:: TZ="America/New_York", TZ="UTC0"
- parse_datetime:: Bellovin、Eggert、Salz、Berets 等的作者