处理人类可读时间偏移和时间戳的库

tslib的Python项目详细描述


tslib是一个时间戳处理工具包和库,用 Python。在处理毫秒精度时非常有用 我们在计算机系统中经常遇到的时间戳,以及 从“现在”开始使用人类可读的时间增量。

安装

可以使用以下命令从pypi直接安装tslib

$ pip install tslib

如果要从该存储库的克隆安装,请使用:

$ git clone https://github.com/mpetazzoni/tslib
$ cd tslib/
$ pip install -e .

tslib取决于将要安装的pytzsix。 自动。

您现在可以使用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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java调用Python函数作为TEID中的UDF   java Android。支持v4导入不工作   java如何影响具有静态属性的类   java如何在从glTexImage2D()分配后编辑纹理的像素颜色   javaspringboot+rediscache+@Cacheable适用于某些方法,而不适用于其他方法   java无法将动态Web模块方面从3.0更改为2.5   java如何在新选项卡中显示打印的文档?   java Google Cloud Endpoints API方法仅在删除用户参数时成功调用   java为什么我可以使用Stack<Double>但不能使用Stack<Double>?   java JDBC PreparedStatement似乎忽略了占位符   java如何设置JInternalFrame的标准图标化位置?   Java文件。copy()不复制文件   基于另一个类的java显示arraylist?   java Android Studio:错误:非法字符:'\u2028'   对象(Java)无法实例化类型映像?   javascript错误:飞行前响应的HTTP状态代码401无效   java确保泛型vararg参数具有相同的类型