2015-08-09 48 views
2

我有一些在Debian 8.1上运行Perl 5.20的代码。但我发现了一个警告,一个错误的下面一行:使用Date :: Manip时,为什么会在SetDate中出现“无效区域”错误?

Date::Manip::DM6::Date_Init("TZ=+0430"); 

警告:

WARNING: the TZ Date::Manip config variable is deprecated 
     and will be removed in March 2016. Please use 
     the SetDate or ForceDate config variables instead. 

错误:

ERROR: [config_var] invalid zone in SetDate: 
at /usr/local/share/perl/5.20.2/Date/Manip/TZ.pm line 1768. 
     Date::Manip::TZ::_config_var_setdate(Date::Manip::TZ=HASH(0x3a11d80), "now,+0430", 0) called at  /usr/local/share/perl/5.20.2/Date/Manip/TZ.pm line 1641 
     Date::Manip::TZ::_config_var_tz(Date::Manip::TZ=HASH(0x3a11d80), "tz", "+0430") called at   /usr/local/share/perl/5.20.2/Date/Manip/TZ_Base.pm line 41 
     Date::Manip::TZ_Base::_config_var(Date::Manip::TZ=HASH(0x3a11d80), "TZ", "+0430") called at   /usr/local/share/perl/5.20.2/Date/Manip/Obj.pm line 250 
     Date::Manip::Obj::config(Date::Manip::Date=HASH(0x3a119f0), "TZ", "+0430") called at    /usr/local/share/perl/5.20.2/Date/Manip/DM6.pm line 96 
     Date::Manip::DM6::Date_Init("TZ=+0430") called at adsl.pl line 75 

我怎样才能解决这个问题?

+2

奇怪的是,你应该从简单的字符串赋值中得到这个错误。也许你应该显示更多的代码,错误可能在上面的行上例如? –

+0

@HåkonHægland脚本有300行,它有一个错误发生的部分 –

+0

看起来你正在使用一个不推荐的配置变量'TZ'和一个无效的时区:'Date :: Manip :: DM6 :: Date_Init(“TZ = + 0430”)' –

回答

4

弃用在Date::Manip::Config解释说:

TZ

This variable is deprecated, but will be supported for several releases. The SetDate or ForceDate variables (described next) should be used instead.

The following are equivalent:

$date->config("tz","Europe/Rome"); 
$date->config("setdate","now,Europe/Rome"); 

至于有关警告“无效区”,显然* Date::Manip需要您在格式+HH:MM:SS(或-HH:MM:SS)指定偏移。

要从此解决这两个警告,adsl.pl的变化线75:

Date_Init("TZ=+0430"); 

这样:

Date_Init("setdate=now,+04:30:00"); 

*我没有看到这个记录任何地方,但该警告由Date::Manip::TZ中的以下代码触发:

return undef if (! exists $$self{'data'}{'Offmod'}{$offset}); 

这在%Date::Manip::Zones::Offmod中进行了一次哈希查找,其中只有格式为+HH:MM:SS(或-HH:MM:SS)的密钥。

相关问题