【发布时间】:2021-09-16 14:57:36
【问题描述】:
我正在使用带有 curl --write-out '\n%{http_code}\t=%{time_total}s\n' 的 API,它提供有关 UNIX 纪元时间 中的字段的日期信息,而不是 ISO8601,这使得很难理解什么是继续。
示例输入:
{"message":"Domains list","list":[{"domain":"example.org","created":"1443042000","regtill":"1632430800"}]}
200 =0.126406s
{"list":[{"d":"abc","c":"1443042000"},{"d":"xyz","c":"1000000000"}]}
200 =0.126406s
有没有办法在这个数据流中找到任何看起来像 UNIX 纪元时间的东西(例如,表示最近的时间(引号中的任何 10 位数字都应该这样做(1000000000 是 2001-09-09 根据@ 987654327@ 和 BSD date(1)))),然后使用 perl 或 BSD awk 中的小型 shell 脚本 sn-p 将其全部转换为类似 ISO8601 的日期,而不需要任何广泛的依赖项来进行转换?
期望的输出(有或没有时区偏移):
{"message":"Domains list","list":[
{"domain":"example.org","created":"2015-09-24T000000+0300","regtill":"2021-09-24T000000+0300"}]}
200 =0.126406s
{"list":[
{"d":"abc","c":"2015-09-24T000000+0300"},
{"d":"xyz","c":"2001-09-09T044640+0300"}]}
200 =0.126406s
【问题讨论】:
-
是的,基本上任何有 10 位数字并用引号括起来的数字。
-
你试过什么?你有什么具体问题吗?另外,这里有两个问题:如何找到 UNIX 纪元时间,以及如何转换它们。第二个已经被问过很多次了。 (第一个是“如何找到一个低于 42 亿的 10 位数字?”,这可能之前已经被问过)
-
$ perl -MTime::Piece -pe 's/(\d{10,})/{localtime($1)->datetime}/ge' <<<'{"message":"Domains list","list":[{"domain":"example.org","created":"1443042000","regtill":"1632430800"}]}'- 你可以通过这个管道你的curl。 -
@simbabque,完美,谢谢!正是我想要的!无需安装任何额外的工具或软件包即可工作!您可以将此作为答案发布吗?我会接受的。
-
我把这段代码放在 cmets 中作为可以做什么的指针。当我尝试这样做时,问题已经结束。我没有声称它会使 JSON 真正起作用,但我将问题理解为“我不关心 JSON,我只想读取值”。 @ikegami 当然是对的,它根本不是一个生产就绪的解决方案。但我并没有声称会。
标签: perl unix-timestamp iso8601