2013-05-08 255 views
2

我在使用以下代碼的iphone項目中獲得了GMT格式的時間。但我想將其轉換爲當地時間。請提供一些解決此問題的想法。將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]; 

正在使用GMT格式將數據發送到server.So首先我想在GMT格式only.Afterthat我想把它轉換。

回答

4

使用此方法在目前的時間轉換爲GMT

+(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 2015-06-25 14:42:46

+0

請多解釋一下你的問題,你想在這裏。謝謝 – 2015-06-25 18:48:45

+0

我有一個NSString = @「2015-06-25T18:00:00Z」這是GMT時間!我得到我的本地時間(這意味着如何將上面的NSString轉換爲另一個NSString與iPhone的本地時區)?我怎麼用你的方法來做到這一點? – Kingofmit 2015-06-25 18:53:15

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格式only.Afterthat我想轉換它。 – Madhumitha 2013-05-08 07:53:07

+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]; – 2013-05-08 07:55:34

+0

您可以在上述兩個日期中使用上面的代碼塊。 – 2013-05-08 07:57:08

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'那麼:-) – 2013-05-08 07:53:05

+0

如果你需要先在格林威治標準時間然後使用你的代碼,然後再設置時區localTimeZone – saadnib 2013-05-08 07:54:57

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

一個NSDate是在UTC/GMT時間的一個固定點。

您應該始終以這種方式存儲您的NSDates。當你顯示時間時,你擔心區域設置和時區。

NSDate和您的方式顯示 NSDate是有區別的。

相關問題