如何从Perl的随机时间戳中获取以纪元形式开始的月份?

dgB*_*gBP 3 perl epoch localtime

我从数据库得到一些时间,我试图按月使用纪元表格存储它们.所以我可以有一些随机的时间,如:

1354120744
1328978360
1297388332
Run Code Online (Sandbox Code Playgroud)

并且对于每一个我想要找到代表该月的第一个的纪元值,因此对于最后一个时间戳,它将是:

1296518400(使用可爱epochconverter.com).

我知道我可以使用POSIX mktime将时间戳减少到几天,等等并相应地更改它们,就像我之前做过的帖子的答案一样:如何在Perl中回顾几个月,考虑到月份的不同日期?

我遇到的麻烦是,虽然我可以零次,但我担心通过更改日期与星期几不匹配,所以基本上是无效日期.这可能是一种不必要的担心; 如果时间得到验证,我不知道如果一周中的错误日期会有所不同.

我看不到任何其他似乎有用的POSIX方法.任何帮助赞赏!

cre*_*ive 9

自从我遇到DateTime后,我就不再担心时间戳问题:

$ perl -MDateTime -E 'say DateTime->from_epoch(epoch => 1354120744)->truncate(to => "month")->epoch;'
1351728000
Run Code Online (Sandbox Code Playgroud)


Dav*_*man 5

我的第一个想法是使用Time :: Locallocaltime结果转换回epoch,并根据需要将适当的值强制为0或1.请注意,星期几不是它所期望的输入值之一,因此您不必担心如果出错则会发生什么.

$start_of_month_epoch = timelocal(0, 0, 0, 1, $month, $year);