本文概述
在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