📅  最后修改于: 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()格式化日期和时间。请注意,标有星号(*)的说明符与语言环境有关。
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