目录

Perl - 日期和时间( Date & Time)

本章将为您提供有关如何在Perl中处理和操作日期和时间的基本知识。

当前日期和时间

让我们从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时间

函数gmtime()工作方式与localtime()函数类似,但返回的值已针对标准格林威治时区进行了本地化。 在列表上下文中调用$ isdst时,gmtime返回的最后一个值始终为0.GWT中没有夏令时。

您应该记录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

格式化日期和时间

您可以使用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

大纪元时间

您可以使用time()函数来获取纪元时间,即自给定日期以来经过的秒数,在Unix中是1970年1月1日。

#!/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()在下表的帮助下格式化日期和时间。 请注意,标有星号(*)的说明符与语言环境有关。

取而代之
%a Abbreviated weekday name * Thu
%A Full weekday name * Thursday
%b Abbreviated month name * Aug
%B Full month name * August
%c 日期和时间表示* Thu Aug 23 14:55:02 2001
%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 小时12h格式( 01-12 ) 02
%j 一年中的001-366一天( 001-366 ) 235
%m 月份为十进制数字( 01-12 ) 08
%M 分钟( 00-59 ) 55
%n 换行符( '\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 第二( 00-61 ) 02
%t 水平制表符( '\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 日期代表* 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
%% %符号 %

让我们检查以下示例以了解其用法 -

#!/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
↑回到顶部↑
WIKI教程 @2018