在 Perl 中,如何确保字符串对应于有效日期?
我想知道 Perl 中是否有一种简单的方法来确保日期字符串对应于有效日期。
例如,2012 02 30
不正确,因为它不存在。
I was wondering if there is a simple way in Perl to ensure that a date string corresponds to a valid date.
For example, 2012 02 30
is incorrect because it doesn't exist.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
DateTime 模块将在创建新对象时验证日期。
错误:-e 第 1 行处的月份日期无效(日 = 30 - 月 = 2 - 年 = 2012)
它也可以在给定的
DateTime
对象上动态运行:The DateTime module will validate dates when creating a new object.
Error: Invalid day of month (day = 30 - month = 2 - year = 2012) at -e line 1
It also works dynamically on a given
DateTime
object:像这样使用 Class::Date 应该可以工作
perl testit.pl
日期或时间范围检查失败
Something like this using Class::Date should work
perl testit.pl
Range check on date or time failed
检查这里:
http://www.perlmonks.org/?node_id=564594
我相信你会得到您向明智的僧侣寻求答案。
Check here:
http://www.perlmonks.org/?node_id=564594
I believe you'll get the answers you seek from the wise monks.
您可以通过使用
POSIX mktime
来完成此操作,但是显然,只有当您有足够灵活的mktime
实现时。我所做的就是插入数字,然后使用当地时间将它们取回,如果我取回当天的值,那么它就是一个有效的数字。因此,给定您的字符串:
看,在我习惯的
mktime
版本中,mktime( 0, 0, 0, 30, 1, 112 )
会'2012-03-01'
和30 != 1
You can do this through the use of
POSIX mktime
, but apparently only if you have a flexible-enough implementation ofmktime
.What I do is plug the numbers in and then use local time to get them back and if I get the same day value back, it's a valid number. So, given your string:
See, in the versions of
mktime
that I'm used to,mktime( 0, 0, 0, 30, 1, 112 )
would make'2012-03-01'
and30 != 1
您还可以使用 Time::Local:
You can also use Time::Local:
也许这也会有帮助:
May be this will help too: