Как узнать текущее время любой страны в моем приложении? - PullRequest
1 голос
/ 18 ноября 2010

Я хочу показать текущее время любой страны.Предположим, я хочу узнать текущее время США в Австралии, или я хочу узнать текущее время Англии в Южной Африке, тогда как мне узнать текущее время страны?Для этого мне был написан код, но я не работал,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterFullStyle];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];

NSDate *date = [NSDate date];

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[dateFormatter setLocale:usLocale];

Приведенный выше код не дает мне правильное время.

Спасибо

1 Ответ

6 голосов
/ 18 ноября 2010

Нет такого понятия, как время США или Австралии. Вы должны использовать правильный часовой пояс, а на материковой части США их 4, а в Австралии - 3 разных часовых пояса.

Чтобы получить текущее время (строку) Мельбурна, Берлина и Лос-Анджелеса, вы должны использовать такой код:

 NSDate *now = [NSDate date];
 NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
 [df setTimeStyle:NSDateFormatterLongStyle];
 [df setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
 NSString *melbourneTime = [df stringFromDate:now];
 [df setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Berlin"]];
 NSString *berlinTime = [df stringFromDate:now];
 [df setTimeZone:[NSTimeZone timeZoneWithName:@"America/Los_Angeles"]];
 NSString *laTime = [df stringFromDate:now];
 NSLog(@"%@", melbourneTime);
 NSLog(@"%@", berlinTime);
 NSLog(@"%@", laTime);

Язык, который вы изменили, влияет на формат. Например, текущее время в Мельбурне в локали en_US - November 18, 2010 9:14:28 PM GMT+11:00, но в de_DE - 18. November 2010 21:14:28 GMT+11:00

...