2013-09-26 2 views
3

Я написал функцию, которая преобразует текущее время utc-gmt или gmt -utc. Функции просто отлично работают, если msgArrivedDate имеет значение NULL. Если это не так (это значит, msgArrivedDate приходит от отдыха службы, дозы, не превращатьGMT и формат UTC с NSDateFormatter

JSon синтаксического анализа части:.

NSArray *messageSentTime = [[args valueForKey:@"messageSendDate"] objectAtIndex:0]; 

    for(int i=0 ;i< [messageSentTime count]; i++) 
    { 
     //[self timeZoneFormatter:@"GMT" :[messageSentTime objectAtIndex:i]]; 

     NSLog(@"Converted time = %@",[self timeZoneFormatter:@"GMT" :[messageSentTime objectAtIndex:i]]); 

Функция часть:

-(id)timeZoneFormatter:(NSString *)formatType : (NSString *)msgArrivedDate 
{ 
    NSDate *date; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 


    if([msgArrivedDate length] > 0) 
    { 

     date = [dateFormatter dateFromString:msgArrivedDate]; 

    } else { 

     date = [NSDate date]; 
    } 


    if([formatType isEqualToString:@"UTC"]) 
    { 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

    } 

    if([formatType isEqualToString:@"GMT"]) 
    { 
     [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 

    } 

    NSString *dateString = [dateFormatter stringFromDate:date]; 

    return dateString; 
} 

ReST вернул меня к этим значениям в UTC формат:

"2013-09-24 15:03:17", 
"2013-09-25 12:09:22", 
"2013-09-25 13:07:45", 
"2013-09-25 13:08:19", 
"2013-09-25 14:22:38" 

Когда я вызвать функцию, (NSLog(@"Converted time = %@",[self timeZoneFormatter:@"GMT" :[messageSentTime objectAtIndex:i]])) возвращается:

messageSentTime = (
    "2013-09-24 15:03:17", 
    "2013-09-25 12:09:22", 
    "2013-09-25 13:07:45", 
    "2013-09-25 13:08:19", 
    "2013-09-25 14:22:38") 

Я думаю, что я просто не хватает немного вопрос по поводу здесь :(пока не смог найти ...

+1

UTC и GMT - это то же самое время. – neilco

+0

UTC и GMT - это просто параметр, который я использовал в функции, GMT означает, что в моей области = NSTimeZone localTimeZone, UTC = NSTimeZone timeZoneWithAbbreviation: @ "UTC"], который отлично работает с нулевым параметром по моей функции –

+1

Не используйте GMT значит что-то не так. Используйте LCL или некоторые из них для обозначения местного времени. –

ответ

13

Изменить это:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

к этому:

[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

Edit: Этот метод будет обрабатывать перевод строки даты: UTC по Гринвичу и от GMT к UTC:

- (id)translateDate:(NSString *)msgArrivedDate 
       from:(NSString *)fromTimeZone 
       to:(NSString *)toTimeZone { 
    NSDate *date = nil; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

    if([fromTimeZone isEqualToString:@"UTC"]) { 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    } 

    if([fromTimeZone isEqualToString:@"GMT"]) { 
     [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
    } 

    if([msgArrivedDate length] > 0) { 
     date = [dateFormatter dateFromString:msgArrivedDate]; 
    } else { 
     date = [NSDate date]; 
    } 

    if([toTimeZone isEqualToString:@"UTC"]) { 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
    } 

    if([toTimeZone isEqualToString:@"GMT"]) { 
     [dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
    } 

    NSString *dateString = [dateFormatter stringFromDate:date]; 
    return dateString; 
} 

Конвертирование "2013-09-25 14:22:38" от UTC по Гринвичу (т.е. местное время, в вашем использовании GMT) приведет к 2013-09-25 15:22:38, и аналогичным образом преобразование «2013-09-25 14:22:38» из GMT в UTC приведет к 2013-09-25 13:22:38.

+0

Это исправило мою проблему :) Большое вам спасибо ... –

+0

Другая проблема только появилась. Эта же проблема произошла только для перехода по времени к UTC. Если я устанавливаю nil, функция получает истинный формат времени для UTC с датой установки = [NSDate date]; Но если msgArrivedDate имеет значение, функция не конвертирует GMT в UTC ... –

+0

вы не переходите из GMT в UTC или наоборот –

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