将GMT时间转换为本地时间

时间:2013-05-08 07:46:08

标签: iphone objective-c xcode ipad

我使用以下代码在我的iphone项目中获得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格式将其发送到服务器。所以首先我只想要GMT格式。我想转换它。

6 个答案:

答案 0 :(得分: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];
    }

答案 1 :(得分:2)

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

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

NSDate与您显示 NSDate的方式之间存在差异。

答案 2 :(得分: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];

答案 3 :(得分: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]

答案 4 :(得分:0)

只需替换此行 -

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];

with -

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

答案 5 :(得分:0)

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