将GMT时间转换为本地

将GMT时间转换为本地

问题描述:

我在使用以下代码的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我想把它转换。

使用此方法在目前的时间转换为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

可以使用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

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]; 

只需更换这条线 -

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

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

一个NSDate是在UTC/GMT时间的一个固定点。

您应该始终以这种方式存储您的NSDates。当你显示时间时,你担心区域设置和时区。

NSDate和您的方式显示 NSDate是有区别的。