Perl 日期和时间
Perl 日期和时间
在 Perl 中处理日期和时间最合适的方式是使用 DateTime 模块。
在每次操作日期和时间之前时间,我们需要通过我们的脚本将 DateTime 加载到内存中。
Perl localtime()
localtime() 函数如果不带任何参数使用将根据系统返回当前日期和时间。
#!/usr/local/bin/perl
$datetime = localtime();
print"Current date and time according to the system : $datetime\n";
输出:
Current date and time according to the system : Fri Jan 6 11:52:04 2017
Perl 创建时间戳
可以通过调用now构造函数来创建显示当前日期和时间的DateTime对象。
<强>
示例:
强>
use DateTime;
my $datetime = DateTime->now;
print"$datetime\n";
输出:
我们还可以通过提供所有细节部分(如日期、分钟、秒等)来创建一个 DateTime 对象。perl 将假定数据为"0",其中不会传递任何细节。
示例:
use DateTime;
$datetime = DateTime->new(
day => 18,
month => 7,
year => 2003,
hour => 12,
);
print"$datetime\n";
输出:
在上面的输出中,我们没有传递分钟和第二部分的任何细节。因此,Perl 假定它为零。
Perl GMT 时间,gmtime()
此函数的工作方式与 localtime() 函数类似,唯一不同的是 gmtime() 返回值针对标准格林威治进行了本地化时区。
#!/usr/local/bin/perl
$gmt = gmtime();
print"$gmt\n";
$local = localtime();
print"$local\n";
输出:
Fri Jan 6 08:43:31 2017
Fri Jan 6 14:13:31 2017
Perl 纪元时间
纪元时间是指特定日期和时间之后的秒数。此特定日期和时间因不同的操作系统而异。例如,对于 Unix,它是 1970 年 1 月 1 日。由于所有操作系统都有不同的纪元时间,因此您不能假设一个系统的纪元时间来自另一个系统。
#!/usr/local/bin/perl
$epoch = time();
print"$epoch\n";
输出:
Perl POSIX 函数 strftime()
Perl POSIX strftime() 函数用于使用前面带有(%) 符号的说明符格式化日期和时间。有两种类型的说明符,一种用于本地时间,另一种用于 gmt 时区。
本地说明符
| 说明符 |
用于 |
示例 |
| %a |
简写代表工作日名称 |
太阳 |
| %A |
代表完整的工作日名称 |
星期日 |
| %b |
简写代表月份名称 |
七月 |
| %B |
代表完整的月份名称 |
七月 |
| %c |
表示日期和时间 |
2017 年 1 月 6 日星期五 12:34:07 |
| %h |
简写表示月份名称,同%b |
七月 |
| %r |
12 小时制时钟时间 |
下午 6:15:30 |
| %x |
表示日期 |
12/28/12 |
| %X |
表示时间 |
15:34:06 |
| %Z |
代表时区 |
|
GMT 说明符
| 说明符 |
用于 |
示例 |
| %C |
年份除以 100 并以整数(00-99) 表示 |
34 |
| %d |
一个月中的某一天,补零(01-31) |
33 |
| %D |
代表MM/DD/YY |
07/18/17 |
| %e |
月份中的第几天,空格填充(1-31) |
33 |
| %F |
代表YYYY-MM-DD |
2017/07/18 |
| %g |
基于周的年份,最后两位数(00-99) |
05 |
| %g |
基于周的年份 |
2015 |
| %H |
24 小时制的小时 |
17 |
| %I |
12 小时格式的小时 |
05 |
| %J |
一年中的第几天(001-366) |
365 |
| %m |
十进制数的月份(01-12) |
07 |
| %M |
分钟(00-59) |
35 |
| %n |
换行符 |
|
| %p |
上午或下午 |
上午 |
| %R |
HH:MM 24 小时制时间 |
17:55 |
| %S |
Secone(00-59) |
45 |
| % t |
水平制表符 |
|
| %T |
ISO 8601 时间格式(HH:MM:SS) |
21:45 |
| %u |
ISO 8601 工作日作为从星期一开始的数字(1-7) |
|
| %U |
第一个星期日作为第一周第一天的周数(00-53) |
|
| %V |
ISO 8601 周数(00-53) |
|
| %w |
以星期日(0-6)开头的十进制数表示工作日 |
|
| % W |
以第一个星期一作为第一周第一天的周数(00-53) |
17 |
| %y |
年份的后两位数(00-99) |
2017 |
| %Y |
全年 |
|
| %z |
ISO 8601 时区与 UTC 的偏移量(1 分钟 = 1,1 小时 = 100) |
+100 |
| %% |
% 符号 |
% |
Perl 显示日期和时间
有时我们需要以不同的格式显示日期或时间。为此,我们可以更改 Perl 中的格式,如下所示。
示例:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use DateTime;
my $datetime = DateTime->new(
day => 18,
month => 7,
year => 2003,
hour => 12,
minute => 00,
second => 00,
);
say $datetime;
say $datetime->ymd;
say $datetime->ymd('_');
say $datetime->hms;
say $datetime->epoch;
say $datetime->year;
say $datetime->month;
say $datetime->day;
say $datetime->strftime( '%Y-%m-%d-%H-%M-%S' );
输出:
2003-07-18T12:00:00
2003-07-18
18-07-2003
12:00:00
1058529600
2003
7
18
2003-07-18-12-00-00