2014-02-12 85 views
1

當我轉換的時候從我的Xcode iPhone模擬器我的代碼工作正常,輸出,因爲它顯示在這裏:iPhone:轉換GMT爲本地時間

2014年2月12日18點11分52秒+0000

本地時區(歐洲/倫敦(GMT)偏移0)

但是當我嘗試使用我的iPhone 5我的應用程序的輸出變爲

1970-01-01 12:00:00 +0000

本地時區(歐洲/倫敦(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。在vborra的代碼中放棄setTimeZone調用,它應該在當地時間給你日期。

的代碼可能是這樣的:

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

但是,OP的問題是他沒有設置語言環境。 –

+0

不,OP的問題是他直接登錄NSDate。這就是NSDate的描述方法,它以GMT顯示日期。日期格式化程序將默認爲用戶當前的語言環境。如果你需要一個不同的區域設置(不同的時區或不同的時間格式),你可以改變它,但很可能默認的區域設置是正確的。 –

+0

看看他的日誌 - 一個顯示AM,另一個顯示不顯示。古典語言環境問題的明顯標誌。按照鏈接,如果你不相信。 –

0

可能這個擴展會更容易。

夫特4:UTC/GMT⟺本地(電流/系統)

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)") 
相關問題