处理人类可读时间偏移和时间戳的库
tslib的Python项目详细描述
tslib是一个时间戳处理工具包和库,用 Python。在处理毫秒精度时非常有用 我们在计算机系统中经常遇到的时间戳,以及 从“现在”开始使用人类可读的时间增量。
安装
可以使用以下命令从pypi直接安装tslib:
$ pip install tslib
如果要从该存储库的克隆安装,请使用:
$ git clone https://github.com/mpetazzoni/tslib $ cd tslib/ $ pip install -e .
tslib取决于将要安装的pytz和six。 自动。
您现在可以使用ts,它应该可以在 你的$PATH。
用法
$ ts -h usage: ts [-h] [-t TZ] [-n] [-i] Human readable timestamps optional arguments: -h, --help show this help message and exit -t TZ, --timezone TZ Use TZ as the local timezone -n, --timestamp-only Only output the resulting millisecond timestamp(s) -i, --inline Apply timestamp replacements inline of the incoming text
ts将毫秒时间戳和人类可读的增量转换为 完全限定的日期和时间打印输出,包含:
- UTC时间戳(自纪元起)
- 时间戳表示的UTC时间
- 由时间戳表示的本地时间
- 此时间戳相对于当前时间的人类可读增量
输出是制表符分隔的,可以通过管道轻松地重新分段 变成column -t-s "\t"。
参数可以作为命令行参数传递,也可以通过管道传递到ts 通过Stdin。如果没有来自这两个源的输入,ts将 只需输出当前时间:
$ ts 1423599084206 2015-02-10 20:11:24.206 UTC+0000 2015-02-10 12:11:24.206 PST-0800 0
内联模式
ts只能在内联替换模式下操作时间戳。在 在这种模式下,您可以通过管道输入任何文本,ts将其输出回 将所有时间戳替换为人类可读的日期和时间, 人类可读的delta表示。
考虑到精确匹配时间戳的固有困难, 匹配限制为13位毫秒的精确时间戳(即 可能紧接着是L)。小于或大于 13位数字不匹配,只剩下13位;这意味着没有13位数字 部分匹配并替换。
$ echo B_b-3PAAYAA B_cJXlvAYAA B_cJXl6AcAA \ | xargs sfc mb g -p TSVH -f sf_checkpointTimestampMs -f sf_updatedOnMs \ | ts -i \ | column -t -s " " sf_id sf_checkpointTimestampMs sf_updatedOnMs B_b-3PAAYAA 2015-03-06 13:38:58.851 PST-0800 (-2w5h18m6s210) 2015-03-06 13:38:58.852 PST-0800 (-2w5h18m6s209) B_cJXlvAYAA 2015-03-08 09:04:36.218 PDT-0700 (-1w5d10h52m28s843) 2015-03-08 09:04:36.218 PDT-0700 (-1w5d10h52m28s844) B_cJXl6AcAA 2015-03-08 09:04:34.252 PDT-0700 (-1w5d10h52m30s810) 2015-03-08 09:04:34.342 PDT-0700 (-1w5d10h52m30s720)
更多示例
管道:
$ cat << EOF | ts pipe heredoc> 1404424797009L pipe heredoc> 1415917836779L pipe heredoc> EOF 1404424797009 2014-07-03 21:59:57.009 UTC+0000 2014-07-03 14:59:57.009 PDT-0700 -31w5d1h14m26s38 1415917836779 2014-11-13 22:30:36.779 UTC+0000 2014-11-13 14:30:36.779 PST-0800 -12w5d43m46s268
使用列输出(假设在^{tt15}中输入相同$ 文件:
$ cat /tmp/ts.txt | ts | cut -f4 -31w5d1h16m17s703 -12w5d45m37s933
在列上排序(此处,按第一列中时间戳的降序排列):
$ cat /tmp/ts.txt | ts | sort -k1 -t $'\t' -r 1415917836779 2014-11-13 22:30:36.779 UTC+0000 2014-11-13 14:30:36.779 PST-0800 -12w5d46m6s924 1404424797009 2014-07-03 21:59:57.009 UTC+0000 2014-07-03 14:59:57.009 PDT-0700 -31w5d1h16m46s694
三角洲
人类可读的delta可以用周(w),天(d)来表示, 小时(h)、分钟(m)和秒(s)。剩下的, 如果没有单位,则假定为毫秒。任何“段”都可以是 省略,唯一的要求是 按跨度降序书写(前几天、前几小时 分钟等)。
这里有一个例子:-12w4d6m57s257。注意,缺少hours, 也就是说12周4天6分57秒257 毫秒。
正如你可能已经猜到的,增量可以是负的也可以是正的。为了 正三角形,如果使用单位,前导+可以省略, 否则,该数字被假定为绝对时间戳:
$ ts -1 1423599850752 2015-02-10 20:24:10.752 UTC+0000 2015-02-10 12:24:10.752 PST-0800 -1 $ ts 0 1 0 1970-01-01 00:00:00.000 UTC+0000 1969-12-31 16:00:00.000 PST-0800 -2353w5d20h24m14s145 1 1970-01-01 00:00:00.001 UTC+0000 1969-12-31 16:00:00.001 PST-0800 -2353w5d20h24m14s144 $ ts +1 1423599855941 2015-02-10 20:24:15.941 UTC+0000 2015-02-10 12:24:15.941 PST-0800 1
使用不同的本地时区
第三列显示了时间戳在本地时间的表示。它 默认为US/Pacific时区,但可以用 -t命令行参数,传入一个时区名 pytz理解:
$ ts -t Europe/Paris 1423600015955 2015-02-10 20:26:55.955 UTC+0000 2015-02-10 21:26:55.955 CET+0100 0
从epoch到人类可读的绝对偏移量
用一个等号(^ {TT26}$)预置一个人类可读的delta, 获得与纪元的绝对偏移量。这样做的副作用是 它允许将人类可读的增量转换为 相应的毫秒持续时间。
$ ts -n '=1h' 3600000 $ ts '=1d' 86400000 1970-01-02 00:00:00.000 UTC+0000 1970-01-01 16:00:00.000 PST-0800 -2365w6d21h56m20s98