本章将使您对如何在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()函数类似,但是返回的值针对标准格林威治时区进行了本地化。在列表上下文中调用时,gistime返回的最后一个值$isdst始终为0。
您应注意以下事实:localtime()()将返回运行脚本的计算机上的当前本地时间,而gmtime()()将返回通用格林威治标准时间或GMT(或UTC)。
#!/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()在下表的帮助下格式化日期和时间。请注意,标有星号(*)的说明符取决于语言环境。
说明符 | 替换为 | 示例 |
---|---|---|
%a
|
工作日缩写名称* | Thu
|
%A
|
工作日全名* | 星期四
|
%b
|
缩写月份名称* | 八月
|
%B
|
全月姓名* | 八月
|
%c
|
日期和时间表示* | 2001年8月23日星期四14:55:02
|
%C
|
年份除以100,并被截断为整数( 00-99 )
|
20
|
%d
|
每月的某天,补零( 01-31 )
|
23
|
%D
|
短的 MM/DD/YY 日期,相当于
|
08/23/01
|
%e
|
每月的某天,使用空格填充( 1-31 )
|
23
|
%F
|
短 YYYY-MM-DD 日期,相当于
|
2001-08-23
|
%g
|
基于周的年份,后两位数字( 00-99 )
|
01
|
%G
|
基于周的年份 | 2001
|
%h
|
缩写月份名称*(与%b 相同)
|
八月
|
%H
|
小时为24小时格式( 00-23 )
|
14
|
%I
|
小时为12小时格式( 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 时间,等同于
|
14:55
|
%S
|
第二( 00-61 )
|
02
|
%t
|
水平制表符('\t')
|
|
%T
|
ISO 8601时间格式( HH:MM:SS ),等效于
|
14:55
|
%u
|
ISO 8601工作日为数字,星期一为 1 (
|
4
|
%U
|
以第一个星期日作为一周的第一天的星期数( 00-53 )
|
33
|
%V
|
ISO 8601周编号( 00-53 )
|
34
|
%w
|
工作日为十进制数字,星期日为 0 (
|
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");
执行以上代码后,将产生以下输出-
date and time - Sat Feb 16 07:10:23 2013 date and time - Sat Feb 16 14:10:23 2013
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕
Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕