Perl 简明教程
Perl - Date and Time
本章将向您介绍如何在 Perl 中处理和操作日期和时间。
Current Date and Time
让我们从 localtime() 函数开始,如果不传递参数,该函数将返回当前日期和时间的值。下面是 localtime 函数在列表上下文中使用时返回的 9 个元素的列表 −
sec, # seconds of minutes from 0 to 61
min, # minutes of hour from 0 to 59
hour, # hours of day from 0 to 24
mday, # day of month from 1 to 31
mon, # month of year from 0 to 11
year, # year since 1900
wday, # days since sunday
yday, # days since January 1st
isdst # hours of daylight savings time
尝试以下示例来打印 localtime() 函数返回的不同元素 −
#!/usr/local/bin/perl
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";
执行上述代码后,将生成以下结果 −
16 Feb Sat
如果你将在标量上下文中使用 localtime() 函数,它将从系统中设置的当前时区返回日期和时间。尝试以下示例以完整格式打印当前日期和时间 −
#!/usr/local/bin/perl
$datestring = localtime();
print "Local date and time $datestring\n";
执行上述代码后,将生成以下结果 −
Local date and time Sat Feb 16 06:50:45 2013
GMT Time
函数 gmtime() 的工作方式与 localtime() 函数类似,但返回的值是针对标准格林尼治时区的本地化。在列表上下文中调用时,$isdst 是 gmtime 返回的最后一个值,它始终为 0。格林尼治标准时间没有夏令时。
您应该注意到 localtime() 会返回运行该脚本的机器上的当前本地时间,而 gmtime() 会返回标准世界时间(世界协调时间,即 GMT 或 UTC)。
尝试以下示例来打印当前日期和时间(但使用 GMT 的时间标度):
#!/usr/local/bin/perl
$datestring = gmtime();
print "GMT date and time $datestring\n";
执行上述代码后,将生成以下结果 −
GMT date and time Sat Feb 16 13:50:45 2013
Format Date and Time
您可以使用 localtime() 函数获取一个包含 9 个元素的列表,然后可以使用 printf() 函数根据您的需求对日期和时间进行如下格式化:
#!/usr/local/bin/perl
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
printf("Time Format - HH:MM:SS\n");
printf("%02d:%02d:%02d", $hour, $min, $sec);
执行上述代码后,将生成以下结果 −
Time Format - HH:MM:SS
06:58:52
Epoch time
您可以使用 time() 函数获取纪元时间,即从 1970 年 1 月 1 日(Unix 纪元时间)开始到现在经过的秒数。
#!/usr/local/bin/perl
$epoc = time();
print "Number of seconds since Jan 1, 1970 - $epoc\n";
执行上述代码后,将生成以下结果 −
Number of seconds since Jan 1, 1970 - 1361022130
您可以将给定的秒数转换为日期和时间字符串,如下所示:
#!/usr/local/bin/perl
$datestring = localtime();
print "Current date and time $datestring\n";
$epoc = time();
$epoc = $epoc - 24 * 60 * 60; # one day before of current date.
$datestring = localtime($epoc);
print "Yesterday's date and time $datestring\n";
执行上述代码后,将生成以下结果 −
Current date and time Tue Jun 5 05:54:43 2018
Yesterday's date and time Mon Jun 4 05:54:43 2018
POSIX Function strftime()
您可以使用 POSIX 函数 strftime() 在下表的帮助下对日期和时间进行格式化。请注意,标记有星号 (*) 的说明符是与区域设置相关的。
Specifier |
Replaced by |
Example |
%a |
Abbreviated weekday name * |
Thu |
%A |
Full weekday name * |
Thursday |
%b |
Abbreviated month name * |
Aug |
%B |
Full month name * |
August |
%c |
* 日期和时间表示 * |
2001 年 8 月 23 日星期四 下午 2:55:02 |
%C |
年份除以 100 并取整 (00-99) |
20 |
%d |
月份中的天数,前面加零 (01-31) |
23 |
%D |
MM/DD/YY 短日期,相当于 %m/%d/%y |
08/23/01 |
%e |
月份中的天数,前面加空格 (1-31) |
23 |
%F |
YYYY-MM-DD 短日期,相当于 %Y-%m-%d |
2001-08-23 |
%g |
基于星期的年份,后两位数字 (00-99) |
01 |
%G |
Week-based year |
2001 |
%h |
缩写的月份名称 * (与 %b 相同) |
Aug |
%H |
24 小时制中的时刻 (00-23) |
14 |
%I |
12 小时制中的时刻 (01-12) |
02 |
%j |
一年中的第几天 (001-366) |
235 |
%m |
作为十进制数的月份 (01-12) |
08 |
%M |
Minute (00-59) |
55 |
%n |
New-line character ('\n') |
|
%p |
AM or PM designation |
PM |
%r |
12-hour clock time * |
02:55:02 pm |
%R |
24 小时 HH:MM 时间,相当于 %H:%M |
14:55 |
%S |
Second (00-61) |
02 |
%t |
Horizontal-tab character ('\t') |
|
%T |
ISO 8601 时间格式 (HH:MM:SS),相当于 %H:%M:%S |
14:55 |
%u |
ISO 8601 周几作为数字,周一为 1(1-7) |
4 |
%U |
周数,第一个星期日为第一周的第一天(00-53) |
33 |
%V |
ISO 8601 周数(00-53) |
34 |
%w |
周几为十进制数字,星期日为 0(0-6) |
4 |
%W |
周数,第一个星期一为第一周的第一天(00-53) |
34 |
%x |
Date representation * |
08/23/01 |
%X |
Time representation * |
14:55:02 |
%y |
年,最后两位数(00-99) |
01 |
%Y |
Year |
2001 |
%z |
ISO 8601 时区 UTC 偏移(1 分钟 = 1,1 小时 = 100)如果无法确定时区,则没有字符 |
+100 |
%Z |
时区名称或缩写 *如果无法确定时区,则没有字符 |
CDT |
%% |
A % sign |
% |
让我们看看以下示例以了解用法 -
#!/usr/local/bin/perl
use POSIX qw(strftime);
$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime;
printf("date and time - $datestring\n");
# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime;
printf("date and time - $datestring\n");
执行上述代码后,将生成以下结果 −
date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013