Perl中处理时间的函数有如下几种:
- time() 函数:返回从1970年1月1日起累计的秒数
- localtime() 函数:获取本地时区时间
- gmtime() 函数: 获取格林威治时间
1. 当地时间——localtime() 函数
localtime() 函数,该函数在没有参数的情况下返回当前的时间和日期。
sec, # 秒, 0 到 61
min, # 分钟, 0 到 59
hour, # 小时, 0 到 24
mday, # 天, 1 到 31
mon, # 月, 0 到 11
year, # 年,从 1900 开始
wday, # 星期几,0-6,0表示周日
yday, # 一年中的第几天,0-364,365
isdst # 如果夏令时有效,则为真
这里 sec 的范围是0 - 61;至于原因不清楚,我只是了解到C99/C++11前范围是0 - 61,是标准允许有两个闰秒;在C99/C++11之后就改为0 - 60。具体原因有大佬知道,还望解答!!!
2. 新纪元时间(Epoch Time)——时间戳——time() 函数
我们可以使用 time() 函数来获取新纪元时间,该函数返回从1970年1月1日起累计的秒数。
3. 格林威治时间 (GMT)——gmtime() 函数
函数 gmtime() 与 localtime() 类似,但它返回标准格林威治时间。
中国的时间比格林威治时间快了8小时。
如果你不明白格林威治时间,下面简要介绍一下:
格林威治时间是国际标准时间,格林威治自然是一个地点,是在英国伦敦。1675-1948年设皇家格林尼治天文台。1884年在华盛顿召开的国际经度会议决定以经过格林尼治的经线为本初子午线,也是世界计算时间和地理经度的起点。(格林尼治就是格林威治,是翻译的译名差异)
这里还有一个概念:时间戳
时间戳是指格林威治时间自1970年1月1日(00:00:00 GMT)至当前时间的总秒数。它也被称为Unix时间戳(Unix Timestamp)。通俗的讲,时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
现在很多文件的自动更新,或者查看文件是否发生改变,一句就是文件最后的时间戳是否改变。具体时间戳还请参考其他博客。
4. 格式化输出时间日期——POSIX 函数 strftime()
函数 strftime() 可以将时间格式化为我们想要的格式。
%a | 星期几的简称( Sun..Sat) * | Thu |
%A | 星期几的全称( Sunday..Saturday) * | Thursday |
%b | 月的简称(Jan..Dec) * | Aug |
%B | 月的全称(January..December) * | 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 | 显示出AM或PM | PM |
%r | 时间(hh:mm:ss AM或PM),12小时 * | 02:55:02 pm |
%R | 24 小时 HH:MM 时间格式,相等于 %H:%M | 14:55 |
%S | 秒数 (00-61 ) | 02 |
%t | 水平制表符 ('\t' ) | |
%T | 时间(24小时制)(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 | 显示日期的格式(mm/dd/yy) * | 08/23/01 |
%X | 显示时间格式 * | 14:55:02 |
%y | 年,两位数 (00-99 ) | 01 |
%Y | 年 | 2001 |
%z | ISO 8601与UTC的时区偏移(1 minute=1, 1 hour=100)
| +100 |
%Z | 当前时区的名称,如"中国标准时间" *
| CDT |
%% | % 符号 | % |
具体示例:
#!/usr/bin/perl
use POSIX qw(strftime);
$datestring = strftime "%Y-%m-%d %H:%M:%S", localtime;
printf("Local_Time == $datestring\n");
# GMT 格式化时间日期
$datestring = strftime "%Y-%m-%d %H:%M:%S", gmtime;
printf("GMT_Time = $datestring\n");
输出结果: