微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

perl – 为什么在8:30增加6天半小时到午夜?

此示例采用基准日期并添加7½小时,1天7½小时,2天7½小时等等.
use Date::Manip;
use DateTime;
use DateTime::Format::DateManip;

Date::Manip::Date_Init("TZ=America/New_York","Language=English");

my $otime = DateTime->new(
    year      => 2013,month     => 3,day       => 4,hour      => 0,minute    => 0,second    => 0,time_zone => 'America/New_York',);

my $t1 = UnixDate($otime,"%i:%M %p on %A,%B %e,%Y ");
print "original $t1\n";

for (my $i = 0; $i <= 20; $i++) {               
    my $dtw = $otime->clone();
    $dtw->add(
        minutes => (15) * 30,days    => ($i),); 
    $t1 = UnixDate($dtw,%Y ");
    print "$i days $t1\n";
}

添加6天7½小时时,结果包含额外的小时.

original 12:00 AM on Monday,march 04,2013
0 days 07:30 AM on Monday,2013
1 days 07:30 AM on Tuesday,march 05,2013
2 days 07:30 AM on Wednesday,march 06,2013
3 days 07:30 AM on Thursday,march 07,2013
4 days 07:30 AM on Friday,march 08,2013
5 days 07:30 AM on Saturday,march 09,2013
6 days 08:30 AM on Sunday,march 10,2013    # why 8:30 and not 7:30?
7 days 07:30 AM on Monday,march 11,2013
8 days 07:30 AM on Tuesday,march 12,2013
9 days 07:30 AM on Wednesday,march 13,2013
10 days 07:30 AM on Thursday,march 14,2013
11 days 07:30 AM on Friday,march 15,2013
12 days 07:30 AM on Saturday,march 16,2013
13 days 07:30 AM on Sunday,march 17,2013
14 days 07:30 AM on Monday,march 18,2013
15 days 07:30 AM on Tuesday,march 19,2013
16 days 07:30 AM on Wednesday,march 20,2013
17 days 07:30 AM on Thursday,march 21,2013
18 days 07:30 AM on Friday,march 22,2013
19 days 07:30 AM on Saturday,march 23,2013
20 days 07:30 AM on Sunday,march 24,2013

解决方法

因为夏令时开始于2013年3月10日在America / New_York时区. DateTime首先增加$i天(3月10日午夜)然后增加450分钟到达8:30 AM(因为3月10日凌晨1点59分之前的分钟是凌晨3点).要添加的参数顺序没有意义;见 Adding a Duration to a Datetime.

因为它增加了几天和几天分开处理(并处理第一天),效果仅发生在DST实际开始或结束的日期.如果你想要一个特定的时间,只需直接设置它而不是使用add.或者调用添加两次,一次添加分钟,然后再添加几天.

原文地址:https://www.jb51.cc/Perl/171755.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐