Perl 日期和时间
-
日期和时间
本章将使您对如何在 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()函数返回的不同元素-
尝试一下@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";
如果将在标量上下文中使用 localtime() 函数,则它将返回系统中设置的当前时区的日期和时间。尝试以下示例以完整格式打印当前日期和时间-
尝试一下$datestring = localtime(); print "Local date and time $datestring\n";
-
格林尼治标准时间
函数gmtime()的功能与localtime()函数的功能相同,但是返回的值针对标准的格林威治时区进行了本地化。在列表上下文中调用时,$isdst(gmtime返回的最后一个值)始终为0。GMT中没有夏令时。您应注意以下事实:localtime()将返回运行脚本的计算机上的当前本地时间,而gmtime()将返回通用格林威治标准时间或GMT(或UTC)。尝试以下示例以GMT比例打印当前日期和时间-
尝试一下$datestring = gmtime(); print "GMT date and time $datestring\n";
-
格式化日期和时间
您可以使用localtime()函数获取9个元素的列表,然后可以使用printf()函数根据您的要求格式化日期和时间,如下所示-
尝试一下($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() 函数获取纪元时间,即自给定日期以来在Unix中为1970年1月1日的秒数。
尝试一下$epoc = time(); print "Number of seconds since Jan 1, 1970 - $epoc\n";
您可以将给定的秒数转换为日期和时间字符串,如下所示:
尝试一下$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";
-
POSIX函数strftime()
您可以在下表的帮助下使用POSIX函数strftime()格式化日期和时间。请注意,标有星号(*)的说明符与语言环境有关。说明符 代替 例 %a 工作日缩写名称* Thu %A 工作日全名* Thursday %b 月份缩写名称* Aug %B 月份全名* 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 基于周的年份 2001 %h 缩写的月份名称*(与相同%b) Aug %H 24小时制小时(00-23) 14 %I 12h格式的小时(01-12) 02 %j 一年中的一天(001-366) 235 %m 以十进制数表示的月份(01-12) 08 %M 分钟(00-59) 55 %n 换行符('\n') %p AM或PM指定 PM %r 12小时制* 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 时间表示* 14:55:02 %y 年,最后两位数字(00-99) 01 %Y 年 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");