【发布时间】:2017-10-05 23:43:09
【问题描述】:
我正在使用 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
非常感谢任何帮助...一直在疯狂搜索,但我无法弄清楚...谢谢!
我尝试了以下代码行:
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
【问题讨论】:
-
谷歌搜索你的问题的标题会得到这个:perlmonks.org/?node_id=17057 作为第一个结果。请解释它为什么不适合你?
-
添加以下代码行时出现以下错误: my $pwdDaysLeft = int(($pwdExpirationDate - $pwdLastSet) / 86400); “只能从 DateTime 对象中减去 DateTime::Duration 或 DateTime 对象。在 pwdreminder.pl 第 65 行”
-
什么是
convertWinFileTimestamp?大概$maxPwdAge是180?pwdExpireDate是指$pwdExpirationDate吗?最好展示一段我们可以自己运行的独立代码。 -
为什么要两次声明并赋值给
$pwdLastSet_dt? -
convertWinFileTimestamp 是一个将 windows 时间戳转换为 perl 可以读取的东西的子例程。抱歉pwdLastSet_dt被复制到论坛两次,我会修复它