将日期从时区转换为设备本地时区和日期

ass*_*fey 2 timezone nsdate nsdateformatter ios

如何将timezone1的日期转换为设备本地时区2的日期?

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];
Run Code Online (Sandbox Code Playgroud)

更新:

我想我明白了.

//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];
Run Code Online (Sandbox Code Playgroud)

好吗?

Joh*_*ohn 8

好先关,时间到了.在这第二个,地球上的任何地方,它都是同一秒.不要再考虑时间格式了.不是.所有时间都应该是GMT,然后您可以基于TimeZone显示它.

Date *d = [NSDate date] ;
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss Z"];
NSTimeZone *nyTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"sometimeabbr."];
NSTimeZone *localTimeZone = [NSTimeZone systemTimeZone];
[df setTimezone: nyTimeZone];
NSLog(@"ny time is %@" , [df stringFromDate: d]);
[df setTimeZone: localTimeZone];
NSLog(@"local time is %@" , [df stringFromDate: d]);
Run Code Online (Sandbox Code Playgroud)

如果给定一个字符串日期并需要转换,请创建NSDateFormatter以摄取字符串日期.确保设置时区.现在你有一个NSDate对象(在NSDates中没有时区),你可以格式化成你想要的任何其他时区.

请为所有神圣的爱所有.将时间视为前进的秒数,将时区视为这些时区的格式.