【问题标题】:Timestamps in human readable form人类可读形式的时间戳
【发布时间】:2016-07-05 21:34:57
【问题描述】:

有没有办法通过管道传输包含一堆 epoch/unix 时间戳值的内容,并查看将日期时间值转换为人类可读形式的文本,例如:

$ cat data.txt
{
  "id": "20a68337-922b-4db0-85d6-719c97e0ee83",
  "published_at": 1457427709695,
  "expires": 1458346544
}

$ cat data.txt | convert-datetimes
{
  "id": "20a68337-922b-4db0-85d6-719c97e0ee83",
  "published_at": Tue, 08 Mar 2016 09:01:49.695 GMT,
  "expires": Wed, 18 May 2016 23:42:21 GMT
}

【问题讨论】:

  • 虽然它们有很多共同点,但这种 Q 清楚地突出了(在一方面)linuxosXunix 之间的差异。如果你能把你的 Q 减少到一个版本,你会得到一个更好的答案。如果您需要跨平台的解决方案,请注明 AND 一如既往,最好向我们展示您的尝试,以便我们帮助纠正您的理解。您可以在所有平台上使用新的gawk 吗?这将简化事情(或 perl 等)。祝你好运。
  • @shellter 理想情况下,我很想找到一个既适用于 OS X 又适用于 linux 的解决方案,因为我的主机是 Mac,我经常通过 ssh 连接到不同的 linux 机器。
  • 时间戳需要覆盖什么时间范围? 2000 年前? 1970 年前? 1904 年以前? 2038 年后?有没有办法识别哪些 13 位数字是自纪元以来的时间(以毫秒为单位),哪些是 13 位 ISBN 数字(或者,在过去,是 13 位信用卡号)?
  • @JonathanLeffler ehhhrm.. 我对复杂的时间戳格式不是很熟悉,我想我需要一些类似于 www.epochconverter.com 的东西
  • date -d @1457427709 (Linux) 或 date -r 1457427709 (OS X) 可用于将 seconds-since-the-epoch 转换为格式化时间。如果它是自时代以来的毫秒数,那么您需要单独添加毫秒数。

标签: linux macos datetime unix command-line


【解决方案1】:

这基本上是一个定义不明确的问题,因为时间戳只是数字,任何数字都对应于一些时间。因此,您必须为哪些值是合理的时间戳定义一些启发式方法。

一旦您有了这样的启发式方法,如果您不想保留输入的结构(在您的示例中为 JSON),只需使用您最喜欢的文本处理语言并实施它即可。例如,我们可以假设任何具有正确位数(毫秒或秒)的数字都可以。

当然,正确的位数会随着时间的推移而变化,但直到 2286 年才会增加,我希望到那时这会过时。

Python:

import re, sys, time

def reformat(match):
    timestamp = int(match.group(1))
    if timestamp >= 1e12:
        timestamp /= 1000.0
    return time.asctime(time.gmtime(timestamp))

for line in sys.stdin:
  sys.stdout.write(re.sub(r"\b(\d{10,14})\b", reformat, line))

Perl 5:

while (<>) {
  s/\b(\d{10,12})\b/gmtime $1/ge;
  s!\b(\d{13,14})\b!gmtime($1 / 1000)!ge;
  print;
}

改进:

  • 如果您知道有关您希望看到的时间戳的信息,例如它们都在当前时间的某个范围内,那么您可以添加一个条件(在替换函数中)返回未编辑的原始字符串如果数值超出范围。

  • 您可以收紧正则表达式以检查附近的字符,例如跳过前面带有“-”的任何内容。

  • 1234563

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2013-03-30
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多