Perl日期和时间

本文概述

在Perl中处理日期和时间的最合适方法是使用DateTime模块。

在执行日期和时间的每个操作之前, 我们需要通过脚本将DateTime加载到内存中。

use 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创建时间戳

可以通过立即调用构造函数来创建一个显示当前日期和时间的DateTime对象。

例:

use DateTime;
my $datetime = DateTime->now;
print "$datetime\n";

输出

2017-01-06T06:29:38

我们还可以通过部分提供所有详细信息(例如日期, 分钟, 秒等)来创建DateTime对象。perl将假定数据为” 0″, 而不会传递任何详细信息。

例:

use DateTime;
$datetime = DateTime->new(
    day        => 18, month      => 7, year       => 2003, hour       => 12, );
print"$datetime\n";

输出

2003-07-18T12:00:00

在上面的输出中, 我们在第二部分和第二部分都没有传递任何细节。因此, 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";

输出

1483686914

Perl POSIX函数strftime()

Perl POSIX strftime()函数用于格式化日期和时间, 并在说明符前加(%)符号。说明符有两种类型, 一种用于本地时间, 另一种用于gmt时区。

本地说明符

Specifier Used For Example
%a 简短地表示工作日名称 Sun
%A 代表完整的工作日名称 Sunday
%b 简写代表月份名称 Jul
%B 代表完整的月份名称 July
%c 代表日期和时间 2017年1月6日星期五12:34:07
%h 缩写表示月份名称, 与%b相同 Jul
%r 12小时制时钟 6:15:30 pm
%x Represent date 12/28/12
%X 代表时间 15:34:06
%Z 代表时区

GMT指标

Specifiers 用于 Example
%C 年份除以100并以整数表示(00-99) 34
%d 每月的某天, 零填充(01-31) 33
%D Represents MM/DD/YY 07/18/17
%e 每月的某天, 填充了空格(1-31) 33
%F Represents 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 Minute (00-59) 35
%n 换行符
%p 上午或下午 AM
%R HH:MM时间以24小时格式 17:55
%S 塞康(00-59) 45
%吨 水平制表符
%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 时区中UTC的ISO 8601偏移量(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
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?