【问题标题】:How do I parse a date/time format using strptime() function?如何使用 strptime() 函数解析日期/时间格式?
【发布时间】: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

标签: shell perl


【解决方案1】:

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加载的时间结构的时间分量转换成字符串描述。

【讨论】:

  • 你能解释一下什么是“Time::Piece;”吗?做?还有怎么在最后一行使用的是strftime,而不是strptime? :)
  • @Nate, use Time::Piece; 加载模块,strptime 没有在最后一行使用,因为最后一行不尝试解析日期时间字符串。
  • @Nate Think "(str)ing (p)arse" for strptime;想想strftime 的“(str)ing(f)格式”。
猜你喜欢
  • 2016-10-20
  • 2021-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多