2

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

4

6 回答 6

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];
    }
于 2013-05-08T09:01:01.423 回答
2

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

您应该始终以这种方式存储您的 NSDates。当您显示时间时,您会担心语言环境和时区。

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

于 2013-05-08T07:59:18.457 回答
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];
于 2013-05-08T07:51:39.070 回答
0
    [dateFormatter setLocale:[NSLocale systemLocale]];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    NSString *resultString = [dateFormatter stringFromDate: currentTime];
    [dateFormatter release];
于 2013-05-08T07:52:46.467 回答
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]
于 2013-05-08T07:51:00.447 回答
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];
于 2013-05-08T07:51:43.560 回答