加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:58:00 所属栏目:大数据 来源:网络整理
导读:此示例采用基准日期并添加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,h
此示例采用基准日期并添加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 $t1n";

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 $t1n";
}

当添加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.或者调用添加两次,一次添加分钟,然后再添加几天.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读