如何获得ios当前的当地时间

时间:2014-05-19 05:26:50

标签: ios nsdate nsdateformatter

我尝试从设备获取当地时间

nsdate将返回UTC时间

当我使用localtime区域转换时,字符串将返回当前本地时间......

我再次尝试将字符串转换为本地日期,但它只返回UTC时间

这是我的代码......如何在NSDate中获得本地时间...

NSDate *currentDate = [NSDate date];

NSLog(@"currentDate: %@", currentDate); // Result: currentDate: 2014-05-19 05:21:50 +0000

 NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter2 setDateFormat:@"yyyy/MM/dd HH:mm:ss"];

NSString *strDate = [dateFormatter2 stringFromDate:currentDate];

NSLog(@"strDate: %@", strDate); // Result: strDate: 2014/05/19 10:51:50

NSDate *newDate = [dateFormatter2 dateFromString:strDate];

NSLog(@"newDate: %@", newDate); // Result: newDate: 2014-05-19 05:21:50 +0000

任何人都可以帮助在NSDate中获取本地日期时间

2 个答案:

答案 0 :(得分:3)

试试这个:

NSDate* sourceDate = [NSDate date];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];

答案 1 :(得分:2)

时间总是以NSDate格式保存为UTC,无法更改。

可以获得本地时区的字符串表示,OP已经完成了。

NSDate的参考日期为“2001年1月1日的第一次格林尼治标准时间”