これらの5つのステートメントは互換性がありますか、それとも、それらを使用すると異なる結果が生じるケースを知っていますか?私が集めたものからそれらは同等ですが、私は決定的なものを何も見つけていません、そしてGMTとUTCバリアントの間の潜在的な違いは私を心配しています。
[NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone timeZoneWithName:@"UTC"];
[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[NSTimeZone timeZoneForSecondsFromGMT:0];
the docs によると、CFTimeZone
(および拡張子によってはNSTimeZone
)は、タイムゾーン名、省略形、GMTオフセット、および TZ (または「Olsen」)データベース 。
ソース を見ると、意味的には「GMT」と「UTC」はまったく異なりますが、実際には違いはありません。「GMT」はゼロオフセットタイムゾーンにすぎません。
更新:この回答は1968年4月9日より後の日付にも当てはまりますが、過去の日付を扱う場合、Cocoaは有効なGMTの過去の定義を使用しているようです問題の日付(現在の定義ではなく)。これは、1968年4月9日より前の日付ではGMTとUTCが異なる可能性があることを意味します。詳細な説明については この有益なブログ投稿 の最後を参照してください。
ほとんどすべての場合のGMTはUTCを意味します。
しかし、今日それが意図されているものとは間違った言葉です。
Unfortunatley AppleはGMTという用語を使用していますが、UTCを使用する必要があります。
GMTはUTC(1928年以降)の意味でもはや存在していませんが、英国とアフリカでは不幸なことに、この用語は西ヨーロッパ時間または西ヨーロッパ夏時間を表すために使用されています。本当のGMTは今日UTと呼ばれ、UTCとは最大0.9秒異なる場合があります。
ただし、一部のコンピュータープログラム(メールヘッダー)では、歴史的な理由(UNIX)のため、GMTと呼ばれています(UTCの意味で)
AppleのNSDateFormatterおよびインターネット日付の記事 は[NSTimeZone timeZoneForSecondsFromGMT:0]
を使用します:
static NSDateFormatter * sRFC3339DateFormatter;
NSString * userVisibleDateTimeString;
NSDate * date;
// If the date formatters aren't already set up, do that now and cache them
// for subsequence reuse.
if (sRFC3339DateFormatter == nil) {
NSLocale * enUSPOSIXLocale;
sRFC3339DateFormatter = [[NSDateFormatter alloc] init];
enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
[sRFC3339DateFormatter setLocale:enUSPOSIXLocale];
[sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
[sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
}