12

Perl で日付/時刻 GMT 0 を GMT -6 に変換しようとしています。

たとえば、DHCP サーバーのリース時間は次の形式です。

2010/02/18 23:48:37

その時間を Localtime ゾーン (GMT -6) に変換しようとしていますが、夏時間を尊重する必要があります。

以下のスクリプトはやり過ぎかもしれませんが、ここから先に進む方法がわかりません。(どんな提案でもいいです)。

my $TIMESTART;

$TIMESTART = "2010/02/18 23:48:37";
$TIMESTART =~ s/\//-/g;

use DateTime;
use DateTime::TimeZone;

use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);

my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );

print $tz->offset_for_datetime($dt) . "\n";

次の行が出力されます。

2010-02-18T23:48:37
-21600

GMT -6 のローカル タイム ゾーンを取得するには、日付に -21600 を追加できる必要がありますが、これにどのようにアプローチするかわかりません。

4

5 に答える 5

18

set_time_zoneメソッドを 2 回呼び出します。

my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);
$dt->set_time_zone('UTC'); ## set timezone of parsed date time
$dt->set_time_zone('America/Chicago'); ## change timezone in safe way

print DateTime::Format::MySQL->format_datetime($dt),"\n"; ## check the result

使い方:

  • タイムゾーンを指定せずにオブジェクトを作成するDateTimeと、「フローティング」タイムゾーンが設定されます
  • set_time_zoneタイムゾーンをUTC変換せずに変更する最初の呼び出し
  • へのset_time_zone変更の 2 回目の呼び出しUTCAmerica/Chicago
于 2010-02-24T21:27:34.340 に答える
1

これにより、UTC 時間が ETC 時間に変換されます。日付の +FORMAT パラメータを使用して、任意の形式で日付/時刻を使用することもできます。

日付 --date='TZ="ETC" 18:30'

于 2016-04-11T08:33:41.813 に答える
0

Time::Piece良質の非常に軽量なコードです。または、組み込みの and を使用することもできstrftimeますPOSIX::strptime

于 2010-02-24T21:24:24.770 に答える