Проблема в покрытии времени по Гринвичу по местному времени
Мое текущее время устройства --- 2013-05-09 10:23
Я конвертирую его в GMT со следующим кодом
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"time in GMT ------ %@",timeStamp);
И я получил выход как
time in GMT ------ 2013-05-10 04:53 AM
Затем я нашел свой часовой пояс
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
NSLog(@"local timezone is------ %@",[localTime name]);
выход
local timezone is------ Asia/Kolkata
Теперь мне нужно преобразовать вышеуказанное время по Гринвичу в местное время. Я использовал следующий код
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:[localTime name]];
[dateFormatter setTimeZone:sourceTimeZone];
NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
NSLog(@"local time is ------- %@",dateFromString);
Но я получаю неправильный результат..
local time is ------- 2013-05-09 19:23:00 +0000
Почему это случилось? Я должен получить местное время как - 2013-05-09 10:23 утра
5 ответов
// получить текущую дату / время
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *currentTime = [dateFormatter stringFromDate:today];
[dateFormatter release];
NSLog(@"User's current time in their preference format:%@",currentTime);
Ваш timestamp
Строка в GMT. Это означает, что когда вы хотите преобразовать строку GMT обратно в NSDate
ваш форматировщик даты должен быть установлен на GMT, а не на местный часовой пояс. Делая это, вы получите правильное NSDate
,
И не забывайте, что когда вы входите NSDate
объект, он будет отображаться в GMT независимо от чего-либо еще.
Попробуйте использовать этот код:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm a"];
// get time zone
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDate *date = [NSDate date];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
date = [dateFormatter dateFromString:timeStamp];
// change time zone
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Kolkata"]];
// or you can use SystemTimeZone
// [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSString *strDateWithLocalTimeZone = [dateFormatter stringFromDate:date];
NSLog(@"Local Time Zone Date %@", strDateWithLocalTimeZone);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm a";
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:gmt];
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"time in GMT ------ %@",timeStamp);
NSTimeZone *localTime = [NSTimeZone systemTimeZone];
NSLog(@"local timezone is------ %@",[localTime name]);
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[dateFormatter setTimeZone:sourceTimeZone];
NSDate *dateFromString = [dateFormatter dateFromString:timeStamp];
NSLog(@"local time is ------- %@",dateFromString);
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
dateFormatter1.dateFormat = @"yyyy-MM-dd HH:mm";
NSTimeZone *gmt1 = [NSTimeZone localTimeZone];
[dateFormatter1 setTimeZone:gmt1];
NSString *timeStamp1 = [dateFormatter1 stringFromDate:[NSDate date]];
NSLog(@"local time is ------- %@",timeStamp1);
Выход:
time in GMT ------ 2013-05-10 05:13 AM
local timezone is------ Asia/Kolkata
local time is ------- 2013-05-10 00:13:00 +0000
local time is ------- 2013-05-10 10:43
Пожалуйста, моя дорогая, не прилагайте больших усилий в Google. Сначала найдите ваш вопрос в Google, и если вы не получили ответ в этом случае, поставьте свой вопрос в стеке. И смотрите ваш ответ по ссылке ниже....