【发布时间】:2014-01-28 12:15:08
【问题描述】:
如何将 timezone1 的日期转换为设备本地 timezone2 的日期?
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Jerusalem"]];
NSDate *date = [dateFormat dateFromString:timestamp];
then something like:
[dateFormat2 setTimeZone:[NSTimeZone localTimeZone]];
date2 = [dateFormat2 dateFromDate:date withOtherTimeZone:zone];
更新:
我想我明白了。
//get source date from the server
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDate *sourceDate = [dateFormat dateFromString:timestamp];
//set timezones
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithName:@"Asia/Jerusalem"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
//calc time difference
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
//set current real date
NSDate* date = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
还好吗?
【问题讨论】:
-
你可能想先做一点学习。 NSDate 没有“时区”。
-
你不应该。以不同的格式和时区向用户显示日期是一回事,但几乎没有理由实际转换 NSDate。为什么你认为你需要?
-
我们的应用中有一个聊天部分,用于接收来自服务器的时间戳。时间戳根据服务器的时区,我们希望向用户显示他收到消息的当前时间,而不是全局服务器时间。这可以通过设备的本地时区达到,对吗?
标签: ios timezone nsdate nsdateformatter