1

私は AWS PHP SDK を使用しており、Amazon の API は以下のタイムスタンプを返しています。

2013-04-23T13:18:00Z

彼らが私に与えているタイムスタンプは、すでに私のタイムゾーンにあるようです。タイムゾーンが明記されていないので、私の現地時間だと思われます。ISO 8601 の wiki サイトにも記載されています...

UTC 関係情報が時間表現で指定されていない場合、時間は現地時間であると見なされます。

しかし、このように PHP で使用しようとすると、ローカルのタイムゾーンに変換されます。PHPのstrtotimeページにはこう書かれています...

この関数の各パラメーターは、そのパラメーターでタイム ゾーンが指定されていない限り、既定のタイム ゾーンを使用します。

私の質問は、それがすでに私のタイムゾーンにあるのに、なぜ strtotime がそれを私のタイムゾーンに変換するのですか?

4

1 に答える 1

2

Amazon から返された日付の末尾の「Z」は、UTC を意味します。タイムゾーンをローカライズするには変換する必要があります。これを行うには、次のようにします。

<?php

$date = new DateTime('2013-04-23T13:18:00Z'); // Z = UTC
echo $date->format('H') . PHP_EOL;
//> 13
$date->setTimezone(new DateTimeZone('America/Los_Angeles')); // -0700
echo $date->format('H') . PHP_EOL;
//> 06

更新:完全なソリューションについては、すべてのコメントをお読みください。

于 2013-04-23T21:43:11.137 に答える