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