如何使用 Perl 找到今天(本地时区)的最小纪元时间?
Posted
技术标签:
【中文标题】如何使用 Perl 找到今天(本地时区)的最小纪元时间?【英文标题】:How do I find the smallest epoch time that is in today (local timezone) with Perl? 【发布时间】:2013-03-14 09:24:45 【问题描述】:Perl 时间函数很棒,但是我如何找到今天的最小 epoch 值?由于纪元以秒为单位,我想有许多纪元值对应于给定的一天。如何找到我所在时区的最低时区?
【问题讨论】:
使用某种形式的localtime
函数,并传入当天的午夜?
【参考方案1】:
timelocal
的使用不受支持,但使用它来获取所需信息应该没有问题。
use Time::Local qw( timelocal );
my $epoch = timelocal(0,0,0, (localtime)[3,4,5]);
我不知道任何一天有两个午夜的时区,所以我无法对其进行测试。
我测试了一个没有午夜的时区(2013 年 10 月 20 日在美国/圣保罗),它运行良好。
【讨论】:
如果您需要 100% 到秒的准确度,闰秒可能很重要(他们会在午夜添加它们,所以您会得到像“23:59:60”这样的时间。(我不确定Perl 和/或各种操作系统如何计算闰秒。) @bigiain,正如您所展示的,它们是在 午夜之前添加的,因此不会影响答案。 我的本地 Perl(Mac OS X 10.6.8 上的 5.10.0)显示在 20120630235958、20120630235959、20120701000000 和 20120701000001 和 20120701000001 之间单调增加的纪元值(在 206302 处)。如果我在 2012 年 7 月 1 日星期日 00:00:00 询问它的纪元,它会说 1341100800 - 我很确定技术上是 2012 年 6 月 30 日星期六的 23:59:60。(也许是操作系统和/或 POSIX和/或我的 C 库和/或 Perl 在 20120630235960 时表现不同?)以上是关于如何使用 Perl 找到今天(本地时区)的最小纪元时间?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Perl 中的随机纪元时间戳获取纪元形式的月份开始?