2012-03-23 3 views
0

サーバーは、カレンダーにエントリを追加するために使用される2012-04-30T10:00:00(文字列として)の形式で日付を送信しています。私はカレンダーイベントの開始日を設定するために使用されるNSDateに文字列から日付を変換するために、次のコードを使用しています。Zを使用し、Zを使用しないでRFC3339日付を処理する方法は?

2012-04-30T10:00:00と2012-04-30T10:00:00Zの両方のエントリがカレンダー内で同時に追加されています。 Zが存在する場合、UTC時間として追加されるか、または存在しない場合は現地時間として追加されるように、どうすればよいですか?

+ (NSDate*) convertDate: (NSString*) fromString 
{ 
    [NSTimeZone resetSystemTimeZone]; 
    NSLocale *enUSPOSIXLocale; 
    NSDateFormatter *sRFC3339DateFormatter = [[NSDateFormatter alloc] init]; 
    enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 

    [sRFC3339DateFormatter setLocale:enUSPOSIXLocale]; 
    [sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; 
    [sRFC3339DateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 

    NSDate *date = [sRFC3339DateFormatter dateFromString:fromString]; 
    return date; 
} 

答えて

0

フォーマッタのタイムゾーンをUTCに設定します。

[sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

編集:あなたが好きな、そうでない場合は、システムのタイムゾーンを使用して、Zが存在する場合UTCにタイムゾーンを設定する必要があります:

+ (NSDate*) convertDate: (NSString*) fromString 
{ 
    [NSTimeZone resetSystemTimeZone]; 
    NSLocale *enUSPOSIXLocale; 
    NSDateFormatter *sRFC3339DateFormatter = [[NSDateFormatter alloc] init]; 
    enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 

    [sRFC3339DateFormatter setLocale:enUSPOSIXLocale]; 
    [sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; 
    if([fromString characterAtIndex:[fromString length]-1] == 'Z') { 
     [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    } 
    else { 
     [sRFC3339DateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
    } 

    NSDate *date = [sRFC3339DateFormatter dateFromString:fromString]; 
    return date; 
} 
+0

両方の日付が来るこれは、トリックを行いますつまり2012-04-30T10:00:00と2012-04-30T10:00:00Zが同じ時間(午前3時に表示される)のカレンダーに追加されます。 – Gruntcakes

+0

はい、Zが存在するかどうかに応じて、タイムゾーンをUTCまたはシステムのタイムゾーンに設定する必要があります。私の更新された答えを見てください。 – zpasternack

関連する問題