perl - 为什么将 6 天 7½ 小时添加到午夜会导致 8 :30?

标签 perl datetime

此示例采用基准日期并添加 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, "%i:%M %p on %A, %B %e, %Y ");
    print "$i days $t1\n";
}

当添加 6 天 7½ 小时时,结果包含一个额外的小时。

原定于 2013 年 3 月 4 日星期一上午 12:00
2013 年 3 月 4 日星期一上午 07:30 0 天
2013 年 3 月 5 日,星期二 1 天 07:30
2013 年 3 月 6 日星期三上午 07:30 两天
2013 年 3 月 7 日星期四 3 天 07:30 AM
2013 年 3 月 8 日,星期五,4 天 07:30
2013 年 3 月 9 日星期六 07:30 AM 5 天
2013 年 3 月 10 日星期日 6 天 08:30 # 为什么是 8:30 而不是 7:30?
7 天 2013 年 3 月 11 日星期一上午 07:30
8 天 2013 年 3 月 12 日,星期二 07:30 AM
2013 年 3 月 13 日,星期三 9 天 07:30
2013 年 3 月 14 日星期四上午 10 点 07:30
2013 年 3 月 15 日星期五 11 天 07:30
2013 年 3 月 16 日星期六 12 天 07:30
2013 年 3 月 17 日星期日 13 天 07:30
14 天 2013 年 3 月 18 日星期一上午 07:30
2013 年 3 月 19 日,星期二,15 天 07:30
16 天 2013 年 3 月 20 日,星期三 07:30 AM
17 天 2013 年 3 月 21 日星期四上午 07:30
2013 年 3 月 22 日星期五 18 天 07:30
2013 年 3 月 23 日星期六 19 天 07:30
20 天 2013 年 3 月 24 日星期日上午 07:30

最佳答案

因为夏令时从 2013 年 3 月 10 日在美国/纽约时区开始。 DateTime首先添加 $i天(到 3 月 10 日午夜),然后增加 450 分钟到上午 8:30(因为 3 月 10 日凌晨 1:59 之后的分钟是凌晨 3:00)。参数顺序为add没有意义;见 Adding a Duration to a Datetime .

因为它分别添加天数和分钟数(并首先处理天数),所以效果仅在 DST 实际开始或结束的日期发生。如果您想要特定时间,只需 set它直接而不是使用 add .或调用add两次,一次增加分钟,然后再次增加天。

关于perl - 为什么将 6 天 7½ 小时添加到午夜会导致 8 :30?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15218648/

相关文章:

匹配重音符号的正则表达式

perl - 如何为 Perl Web 服务实现服务器端速率限制?

linux - 如何在路径包含空格的文件上使用 `diff`

java - Perl 使用 System.exit 从 Java Jar 返回代码

c# - DateTime 应该存储在世界各地都可以访问的网站中的 UTC 时间还是(服务器的)本地时间

python - 如何阻止正则表达式过滤掉 4 个数字中的 2 个数字?

perl - 这些 JSON 命令有什么区别?

php - HTML 日期时间 到 PHP 到 MySQL

iphone - ios 游戏中心提交时间并在排行榜中显示

JavaScript/jQuery 可以做一些改进