2013-05-08 2 views
2

Я получил время в формате GMT ​​в моем проекте iphone, используя следующий код. Но я хочу преобразовать его в местное время. Пожалуйста, дайте несколько идей, чтобы решить эту проблему. Спасибо заранее.конвертировать GMT время в местное

NSDate *currentTime = [NSDate date]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

     NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
     [dateFormatter setTimeZone:gmt]; 

     NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
     [dateFormatter release]; 

Am используя формат GMT для отправки его на server.So первый я хочу его в формате GMT ​​only.Afterthat я хочу, чтобы преобразовать его.

ответ

4

Используйте этот метод, чтобы преобразовать текущее время по Гринвичу

+(NSDate *)getCurrentGMTTime 
    { 
     NSTimeZone *tz = [NSTimeZone defaultTimeZone]; 
     NSInteger seconds = -[tz secondsFromGMTForDate: [NSDate date]]; 
     return [NSDate dateWithTimeInterval: seconds sinceDate: [NSDate date]]; 
    } 

И затем использовать этот метод для преобразования GMT время назад по местному времени. Передайте свой GMT NSDate этому методу.

+(NSDate *)getLocalTimeWithDate:(NSDate*)date 
    { 
     NSTimeZone *tz = [NSTimeZone defaultTimeZone]; 
     NSInteger seconds = [tz secondsFromGMTForDate: date]; 
     return [NSDate dateWithTimeInterval:seconds sinceDate: date]; 
    } 
+0

Как мы используем второй код в функция Пустота? – Kingofmit

+0

Пожалуйста, объясните свой вопрос немного больше, что вы хотите здесь. Спасибо –

+0

У меня есть NSString = @ "2015-06-25T18: 00: 00Z" это время по Гринвичу! И я получаю свое местное время (это означает, как преобразовать NSString выше в другую NSString с локальным часовым поясом iPhone)? Как я могу это сделать с помощью вашего метода? – Kingofmit

0

вы можете использовать NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; [dateFormatter setTimeZone:currentTimeZone]; , чтобы получить местный часовой пояс

Или - взят из комментария

NSDate *currentTime = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 

NSString *gmtDateTime = [dateFormatter stringFromDate: currentTime]; 
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone]; 
[dateFormatter setTimeZone:currentTimeZone]; 

NSString *currentDateTime = [dateFormatter stringFromDate: currentTime]; 
[dateFormatter release] 
+0

Я использую формат GMT для отправки его на сервер. Поэтому сначала я хочу его только в формате GMT. После этого я хочу его преобразовать. – Madhumitha

+0

NSDate * currentTime = [NSDate date]; NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat: @ "yyyy-MM-dd HH: mm: ss"]; NSTimeZone * gmt = [NSTimeZone timeZoneWithAbbreviation: @ "GMT"]; [dateFormatter setTimeZone: gmt]; NSString * gmtDateTime = [dateFormatter stringFromDate: currentTime]; NSTimeZone * currentTimeZone = [NSTimeZone localTimeZone]; [dateFormatter setTimeZone: currentTimeZone]; NSString * currentDateTime = [dateFormatter stringFromDate: currentTime]; [dateFormatter release]; –

+0

вы можете использовать вышеуказанный блок кода для обеих дат. –

1
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm"; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
NSString *timeStamp = [dateFormatter stringFromDate:[NSDate date]]; 
[dateFormatter release]; 
0

Просто замените эту строку -

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 

с -

NSTimeZone *gmt = [NSTimeZone localTimeZone]; 

 NSDate *currentTime = [NSDate date]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

     NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
     [dateFormatter setTimeZone:gmt]; 

     NSString *resultString = [dateFormatter stringFromDate: currentTime]; 

     NSTimeZone *localTZ = [NSTimeZone localTimeZone]; 
     [dateFormatter setTimeZone:localTZ]; 

     NSString *localTimeString = [dateFormatter stringFromDate: currentTime]; 
     [dateFormatter release]; 
+0

... но не называйте это 'gmt' then :-) –

+0

если вам нужно сначала в GMT, то используйте свой код, после этого установите часовую зону снова с localTimeZone – saadnib

0
[dateFormatter setLocale:[NSLocale systemLocale]]; 
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSString *resultString = [dateFormatter stringFromDate: currentTime]; 
    [dateFormatter release]; 
2

NSDate фиксированный момент времени в UTC/GMT.

Вы всегда должны хранить NSDates таким образом. Когда вы показываете время, вы беспокоитесь о локали и часовом поясе.

Существует разница между NSDate и способом отображения NSDate.

Смежные вопросы