📜  Perl-日期和时间

📅  最后修改于: 2020-11-02 03:38:29             🧑  作者: Mango


本章将使您对如何在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

格林尼治标准时间

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

您应该注意以下事实: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函数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 Date and time representation * Thu Aug 23 14:55:02 2001
%C Year divided by 100 and truncated to integer (00-99) 20
%d Day of the month, zero-padded (01-31) 23
%D Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
%e Day of the month, space-padded ( 1-31) 23
%F Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
%g Week-based year, last two digits (00-99) 01
%G Week-based year 2001
%h Abbreviated month name * (same as %b) Aug
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (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-hour HH:MM time, equivalent to %H:%M 14:55
%S Second (00-61) 02
%t Horizontal-tab character ('\t')
%T ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55
%u ISO 8601 weekday as number with Monday as 1 (1-7) 4
%U Week number with the first Sunday as the first day of week one (00-53) 33
%V ISO 8601 week number (00-53) 34
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation * 08/23/01
%X Time representation * 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%z

ISO 8601 offset from UTC in timezone (1 minute = 1, 1 hour = 100)

If timezone cannot be termined, no characters

+100
%Z

Timezone name or abbreviation *

If timezone cannot be termined, no characters

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