Perl - 日期时间

首页 / Perl入门教程 / 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()函数返回的不同元素-

#!/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

Epoch时间

您可以使用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()在下表的帮助下格式化日期和时间。请注意,标有星号(*)的说明符取决于语言环境。

说明符 替换为 示例
%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 日期,相当于%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 相同) 八月
%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 时间,等同于%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");

执行以上代码后,将产生以下输出-

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出gRPC -〔李林锋〕

邱岳的产品实战 -〔邱岳〕

深入剖析Kubernetes -〔张磊〕

玩转Spring全家桶 -〔丁雪丰〕

Spring Boot与Kubernetes云原生微服务实践 -〔杨波〕

说透芯片 -〔邵巍〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

说透元宇宙 -〔方军〕

中间件核心技术与实战 -〔丁威〕

好记忆不如烂笔头。留下您的足迹吧 :)