2014-02-12 3 views
1

Когда я конвертировать время из моего Xcode iPhone имитатор мой код работает нормально, а выход как это показывает здесь:iPhone: конвертировать GMT местное время

2014-02-12 18:11:52 +0000

Местное время Зона (Europe/London (GMT) смещение 0)

но когда я попробовать использовать мое приложение на моем iPhone 5 выход изменен на

1970-01-01 12:00:00 +0000 утра

Местное время Зона (Europe/London (GMT) смещение 0)

я использую Xcode 5.0 и IOS-7

-(NSDate *)convertGMTtoLocal:(NSString *)gmtDateStr { 

    NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

    NSTimeZone *gmt = [NSTimeZone systemTimeZone]; 

    [formatter setTimeZone:gmt]; 

    NSDate *GMTTime = [formatter dateFromString:gmtDateStr]; 

    NSTimeZone *tz = [NSTimeZone localTimeZone]; 
    NSLog(@"%@",tz); 
    NSInteger seconds = [tz secondsFromGMTForDate: GMTTime]; 
    NSLog(@"%ld",(long)seconds); 
    NSLog(@"%@",[NSDate dateWithTimeInterval: seconds sinceDate: GMTTime]); 
    return [NSDate dateWithTimeInterval: seconds sinceDate: GMTTime]; 

} 

Благодаря,

+0

http://stackoverflow.com/questions/6613110/what-is-the-best-way-to-deal -with-the-nsdateformatter-locale-feature –

+0

Спасибо, что проблема решена :) – user3116050

ответ

1

NSLog регистрирует даты в GMT. Не используйте это. Создайте формат даты и используйте его для регистрации вашей даты. Код другого плаката точно назад и конвертирует дату в GMT. Оставьте вызов setTimeZone в коде vborra, и он должен дать вам дату по местному времени.

код может выглядеть следующим образом:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterNoStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
    NSString *time = [dateFormatter stringFromDate:[NSDate date]]; 
    NSLog(@"Time is %@", time); 
+0

Но проблема OP в том, что он не установил локаль. –

+0

Нет, проблема с OPs заключается в том, что он зарегистрировал NSDate напрямую. Это вызывает метод описания NSDate, который отображает дату в GMT. Форматирование даты по умолчанию будет соответствовать текущему языку пользователя. Если вам нужен другой язык (для другого часового пояса или другого формата времени), вы можете его изменить, но, скорее всего, он будет правильным. –

+0

Посмотрите, что он записал - один показывает AM, а другой нет. Явный признак классической проблемы локали. Следуйте по ссылке, если вы не верите. –

0

Может это расширение было бы легче.

Swift 4: UTC/GMT ⟺ Local (Current/System)

extension Date { 

    // Convert local time to UTC (or GMT) 
    func toGlobalTime() -> Date { 
     let timezone = TimeZone.current 
     let seconds = -TimeInterval(timezone.secondsFromGMT(for: self)) 
     return Date(timeInterval: seconds, since: self) 
    } 

    // Convert UTC (or GMT) to local time 
    func toLocalTime() -> Date { 
     let timezone = TimeZone.current 
     let seconds = TimeInterval(timezone.secondsFromGMT(for: self)) 
     return Date(timeInterval: seconds, since: self) 
    } 

} 


// Try it 
let utcDate = Date().toGlobalTime() 
let localDate = utcDate.toLocalTime() 

print("utcDate - (utcDate)") 
print("localDate - (localDate)") 
Смежные вопросы