1

月の初めから過去12か月の日付のコレクションを保存しています。ので、私は持っています:

my @t = localtime time();
my $m = $t[4];
my $y = $t[5];

foreach my $date (keys %$dates_ref) {
    $m -= $comparison{$date}; # a hash of numbers to go back the correct number of months
    $dates_ref->{$date} = mktime(0,0,0,1,$m,$y);
}

私は次のような日付の束で終わります:現在の月:1356998400これは:

Tue Jan 01 2013 00:00:00 GMT+0000 (GMT Standard Time)

過去12か月:

1325376000 - Sun Jan 01 2012 00:00:00 GMT+0000 (GMT Standard Time)
1328054400 - Wed Feb 01 2012 00:00:00 GMT+0000 (GMT Standard Time)
1330560000 - Thu Mar 01 2012 00:00:00 GMT+0000 (GMT Standard Time)
1333238400 - Sun Apr 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1335830400 - Tue May 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1338508800 - Fri Jun 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1341100800 - Sun Jul 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1343779200 - Wed Aug 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1346457600 - Sat Sep 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1349049600 - Mon Oct 01 2012 01:00:00 GMT+0100 (GMT Daylight Time)
1351728000 - Thu Nov 01 2012 00:00:00 GMT+0000 (GMT Standard Time)
1354320000 - Sat Dec 01 2012 00:00:00 GMT+0000 (GMT Standard Time)

ご覧のとおり、4月から10月にはGMT時間が追加されます。これを行わないようにするための最良の方法は何00:00ですか?

13332384001333234800

4

3 に答える 3

1

DateTimeモジュールを使用し、タイム ゾーンを適切に処理する必要があります。これは例です:

  my $dt = DateTime->new(
      year      => 2000,
      month     => 5,
      day       => 10,
      hour      => 15,
      minute    => 15,
      time_zone => 'America/Los_Angeles',
  );

  print $dt->hour; # prints 15

  $dt->set_time_zone( 'America/Chicago' );

  print $dt->hour; # prints 17
于 2013-01-22T15:06:11.770 に答える
0

CPAN モジュールをインストールできる場合は、Date::Calc を使用することをお勧めします。ローカル タイムゾーンの代わりに GMT に変換できます。

于 2013-01-22T13:56:29.377 に答える
0

スクリプトの最初の行で localtime の代わりに gmtime を使用します

于 2013-01-22T17:13:10.993 に答える