UTCは夏時間を採用していますか?


83

タイムゾーンを変換しUTCたり、逆にしたりするスクリプトを作成しようとしています。しかし、UTC DSTを考慮して、または考慮せずにタイムゾーンを変換しているUTCときに、同じ時間が得られることがわかったところもあります。例:これを変換しようとすると:

$mytime = '2011-03-31 05:06:00.000';
$myzone = 'America/New_York';

DSTありとDSTなしのUTCに、私は..を取得します。

(New_York->UTC DST=Yes)2011-03-31 09:06:00
(New_York->UTC DST=No)2011-03-31 09:06:00 ..........

これは正しいですか??はいの場合、なぜですか?誰か私にあなたの答えをください。


スクリプトを見せていただければ、もう少しお手伝いできます。
Kevin Lacquement 2011年

4
そして、あなたのタイトルの質問に答えて、UTCは夏時間を観察しません。ただし、他のゾーンは可能性があります。
Kevin Lacquement 2011年

回答:


137

いいえ、UTC自体にDSTがありません。これは、他のタイムゾーンが相対的に表される一定の基準フレームです。

ウィキペディアUTCのページ

UTCは季節の変化によって変化しませんが、タイムゾーンの管轄区域が夏時間または夏時間を採用している場合、現地時間または常用時が変化する可能性があります。たとえば、UTCは、冬の間は米国東海岸の現地時間より5時間進んでいますが、夏の間は4時間進んでいます。

つまり、タイムゾーンがDSTを監視している場合、DST遷移があると、UTCからのオフセットが変化しますが、それはUTCではなくDSTを監視しているタイムゾーンです。

PHPのタイムゾーンの処理についてあまり知らなくても、変換で「DSTあり」または「DSTなし」を指定できるのは奇妙に思えます。タイムゾーン自体がDSTの開始時刻を指定します...そうである必要はありません。自分で指定したもの。


1
「PHPのタイムゾーンの処理についてよく知らなくても、変換で「DSTあり」または「DSTなし」を指定できるのは奇妙に思えます」...これは、プログラム可能なハイパーリンクパスタをあまり実行していないためと考えられます。これは、date_sunrise日の出を知らせる機能が組み込まれた言語です。変換にDSTが必要かどうかはわかりませんが、日付オブジェクトの第一級市民です:php.net/manual/en/function.date.php
ポールドレイパー

@PaulDraper:日付オブジェクトの第一級市民であることは、ある程度の意味があります-変​​換のために個別に指定しないだけです。それ以来、基礎となるCルーチンのいくつかについてもう少し学びましたが、それらはこれと多くの関係があると思います...
Jon Skeet

1
DSTかどうか聞いても大丈夫だと思います。その追加情報がなければ、現地時間+タイムゾーンから明確なUTC時間に移動することはできません。これは、一部の現地時間がDSTからの移行中に2回発生するためです。
トム

@Tom:現地時間が2回発生することはよく知っていますが、変換自体で現地時間がDSTに含まれるかどうかを指定することをお勧めするわけではありません。あいまいな場合は、あいまいさを解決する方法を指定することをお勧めします(IMO)。1月のEDTなど、不可能な状況を表現できないようにするために、APIを使用することをお勧めします。
ジョンスキート2015年

1
PHPでタイムゾーンを作成する方法について混乱している場合は、PHPが混乱しているためです。これは、phpを廃止する必要がある理由の素晴らしい記事です: eev.ee/blog/2012/04/09/php-a-fractal- of-bad-design
Lucent Fox

1

このコードを使用して、同じ問題が発生しています:

date_default_timezone_set('UTC');
$nowdate = date('l jS \of F Y h:i:s A');
echo "Current date and time is: " . $nowdate;

今は夏で、このコードが生成する時間は1時間遅れています。したがって、PHPのUTC時間がDSTに調整されるとは思いません。

誰かが解決策を持っているかどうかを確認するために興味を持ってください...

編集:

フォーラムでこのコードを見つけました、完璧に動作します!!

date_default_timezone_set('Europe/London');
$TIME =  date("m/d/Y H:i",time());

したがって、$ TIMEを使用して、現在の日付と時刻を呼び出すことができます。date()タグ内のビットを変更することにより、出力を調整して表示を変えることができます。date()出力を調整する場合は、次のガイドを使用してください:http//php.net/manual/en/function.time.php

お役に立てれば :)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.