- Perl 基础知识
- Perl - 主页
- Perl - 简介
- Perl - 环境
- Perl - 语法概述
- Perl - 数据类型
- Perl - 变量
- Perl - 标量
- Perl - 数组
- Perl - 哈希
- Perl - IF...ELSE
- Perl - 循环
- Perl - 运算符
- Perl - 日期和时间
- Perl - 子例程
- Perl - 参考资料
- Perl - 格式
- Perl - 文件 I/O
- Perl - 目录
- Perl - 错误处理
- Perl - 特殊变量
- Perl - 编码标准
- Perl - 正则表达式
- Perl - 发送电子邮件
- Perl 高级
- Perl - 套接字编程
- Perl - 面向对象
- Perl - 数据库访问
- Perl - CGI 编程
- Perl - 包和模块
- Perl - 流程管理
- Perl - 嵌入式文档
- Perl - 函数参考
- Perl 有用资源
- Perl - 问题与解答
- Perl - 快速指南
- 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() 函数类似,但返回的值针对标准格林威治时区进行了本地化。当在列表上下文中调用时,gmtime 返回的最后一个值 $isdst 始终为 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()来格式化日期和时间。请注意,标有星号 (*) 的说明符与区域设置相关。
说明符 | 取而代之 | 例子 |
---|---|---|
%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 |
12 小时格式的小时 ( 01-12 ) |
02 |
%j |
一年中的第几天 ( 001-366 ) |
235 |
%m |
十进制数形式的月份 ( 01-12 ) |
08 |
%M |
分钟 ( 00-59 ) |
55 |
%n |
换行符 ( '\n' ) |
|
%p |
上午或下午指定 | 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