我正在使用Perl创建一个将发送密码到期通知的脚本。计算Perl中两个日期之间的天数
我有两个日期:
- 的用户设置密码
,该用户的密码将过期(在设置密码后180天)的日期
use DateTime::Format::Strptime; my $dt_pattern = DateTime::Format::Strptime->new(pattern => '%F',); my $displayName = $entry->get_value("displayName"); my $pwdLastSet = convertWinFileTimestamp($entry->get_value("pwdLastSet")); # Determine password expiration date my $pwdLastSet_dt = $dt_pattern->parse_datetime($pwdLastSet); my $pwdExpirationDate = $pwdLastSet_dt->add(days => $maxPwdAge); # Days until password expires # HELP!!!!!!! sub convertWinFileTimestamp { my $timestamp = shift; # Strip off nanoseconds, then adjust date from AD epoch (1601) to UNIX epoch (1970) return POSIX::strftime("%Y-%m-%d", localtime(($timestamp/10000000) - 11644473600)); }
日期
我想不出如何计算两个日期之间的差异!
下面是每个变量的输出:
pwdLastSet: 2015-02-12
pwdExpireDate: 2015-08-11T00:00:00
任何帮助非常赞赏...一直使用Google像疯了似的,但我想不出它...谢谢!
我尝试下面的代码行:
my $pwdDaysLeft = int(($pwdExpirationDate - $pwdLastSet)/86400);
而且得到了以下错误:
Only a DateTime::Duration or DateTime object can be subtracted from a DateTime object. at pwdreminder.pl line 65
谷歌搜索问题的标题带来了这样的:http://www.perlmonks.org/?node_id=17057作为第一个结果。请解释它如何不适合你? – Arkadiy
当我添加以下代码行时,出现以下错误:my $ pwdDaysLeft = int(($ pwdExpirationDate - $ pwdLastSet)/ 86400); “只有DateTime :: Duration或DateTime对象可以从DateTime对象中减去。at pwdreminder。pl line 65“ –
什么是”convertWinFileTimestamp“?大概$ maxPwdAge是180?通过'pwdExpireDate',你的意思是'$ pwdExpirationDate'吗?最好是展示一个我们可以运行的自包含的代码片段 – Borodin