0

選択したタイムゾーンコードではなく、システムの現在の日付と時刻を取得しているスニペットの下で試しました。

NSDate *now = [NSDate date];
NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithName:selectedzone]];

NSDateComponents* timeZoneComps = [gregorian components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];

NSDate *selectedDate=[gregorian dateFromComponents:timeZoneComps];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterFullStyle];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm:ss "];
NSString *strSelectedDate= [formatter stringFromDate:selectedDate];
setZone.text = strSelectedDate;` 

何か案は?

4

2 に答える 2

1

[NSDate date] は、どこにいても現在の日付と時刻を表す日付オブジェクトを返します。NSDates は、場所やタイム ゾーンの影響を受けません。タイムゾーンごとに異なる日付オブジェクトではなく、現在またはその他の瞬間を表す NSDate は 1 つだけです。したがって、タイム ゾーン間で日付を変換しようとしないでください。

NSDate objects represent an absolute instant in time. Consider the following example of how two date representations in different time zones (9/9/11 3:54 PM in Paris and 9/9/11 11:54 PM in Sydney) are actually the same date.
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateStyle:NSDateFormatterShortStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Paris"]];
    NSDate *aDate = [formatter dateFromString:@"9/9/11 3:54 PM"];
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]];
    NSDate *anotherDate = [formatter dateFromString:@"9/9/11 11:54 PM"];
    NSLog(@"%@",anotherDate);
    if ([aDate isEqualToDate:anotherDate]) {
        NSLog(@"How about that?");
    }

日付を出力する場合、NSDate の記述メソッドは GMT で時間を返すため、NSDateFormatter を使用して日付からパリやシドニーなどの現地時間を表す日付文字列を作成する必要があることに注意してください。

NSDate *now = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Sydney"]];
NSLog(@"%@",[formatter stringFromDate:now]); //--> 9/9/11 11:54 PM
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Paris"]];
NSLog(@"%@",[formatter stringFromDate:now]); //-->  9/9/11 3:54 PM
于 2012-09-05T10:32:23.373 に答える
0
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"];

タイム ゾーンを表示したくない場合は、フォーマット文字列から末尾の「z」文字を削除します。

編集

一方、タイムゾーン名だけを表示したい場合は、「z」を大文字にします。

編集

小文字の「z」は他のすべてのタイムゾーンで問題なく機能しますが、残念ながら GMT は特殊なケースです。したがって、最も簡単な方法は、'z' を省略し、書式設定された日付に "GMT" を追加することです。

于 2012-09-05T10:18:34.393 に答える