【发布时间】:2018-10-18 15:42:10
【问题描述】:
如何使用 strptime() 函数解析日期/时间格式?
要转换的数据/时间格式为: 例如2018 年 1 月 16 日星期二 11:18:20 + 000
【问题讨论】:
-
这几乎看起来像date 实用程序的默认输出。如果
+ 000是错字并且+后面实际上没有空格,则str(pf)time 模式将为%a %b %e %H:%M:%S %z %Y。
如何使用 strptime() 函数解析日期/时间格式?
要转换的数据/时间格式为: 例如2018 年 1 月 16 日星期二 11:18:20 + 000
【问题讨论】:
+ 000 是错字并且+ 后面实际上没有空格,则str(pf)time 模式将为%a %b %e %H:%M:%S %z %Y。
strptime 的手册页显示了 API 详细信息以及 C 的示例。
在 Perl 中,Time::Piece 模块(它是 Perl 核心的一部分)提供了 strptime 函数。示例包含在模块的文档中。
例如,这个 Perl sn-p 会将日期格式转换为 ISO 8601 表示法:
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime
("Tue Jan 16 11:18:20 +0000 2018", "%a %b %d %H:%M:%S %z %Y");
print $t->strftime("%Y-%m-%dT%H:%M:%S\n");
...产生输出:
2018-01-16T11:18:20
生成 ISO 日期的简写方式是:
print $t->datetime, "\n";
而您可以由此获得相应的纪元秒数:
print $t->epoch, "\n";
因此,strptime 将时间描述字符串(其第一个参数)转换为其组件,基于其第二个参数中其片段的定义。 strftime是逆运算,将strptime加载的时间结构的时间分量转换成字符串描述。
【讨论】:
use Time::Piece; 加载模块,strptime 没有在最后一行使用,因为最后一行不尝试解析日期时间字符串。
strptime;想想strftime 的“(str)ing(f)格式”。