iOS-将时间和日期转换为用户时区

iOS-将时间和日期转换为用户时区,ios,timezone,Ios,Timezone,我在一个Web服务器上发送一些请求,该服务器在以下时间和日期回复我: "at 18:58 of 05/08/2012" 我可以通过两个NSstring(18:5805/08/2012)计算出如何获取时间和日期。 请注意,服务器的时区为+00:00。我想完成的是,这次根据用户的位置进行演示。例如,如果来自服务器的回复是2012年8月5日23:30,而用户的时区是+2:00,那么我想在2012年8月6日给他1:30。 有什么想法吗?不要从服务器获取绝对时间,而是从服务器获取时间戳,并在客户端将其转

我在一个Web服务器上发送一些请求,该服务器在以下时间和日期回复我:

"at 18:58 of 05/08/2012"
我可以通过两个NSstring(18:5805/08/2012)计算出如何获取时间和日期。 请注意,服务器的时区为+00:00。我想完成的是,这次根据用户的位置进行演示。例如,如果来自服务器的回复是2012年8月5日23:30,而用户的时区是+2:00,那么我想在2012年8月6日给他1:30。
有什么想法吗?

不要从服务器获取绝对时间,而是从服务器获取时间戳,并在客户端将其转换为日期,因此您不必同时更改时区。

您应该按照以下方式执行:

1)首先,创建一个NSDateFormatter以获取从服务器发送的NSDate:

NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[serverFormatter setDateFormat:@"'at 'HH:mm' of 'dd/MM/yyyy"];
NSDate *theDate = [serverFormatter dateFromString:theString];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"HH:mm dd/MM/yyyy"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];
From:注意:对于Unicode格式字符串格式,您应该在格式字符串中的撇号(“”)之间包含文字

2)将字符串(将其定义为
theString
)转换为
NSDate

NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[serverFormatter setDateFormat:@"'at 'HH:mm' of 'dd/MM/yyyy"];
NSDate *theDate = [serverFormatter dateFromString:theString];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"HH:mm dd/MM/yyyy"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];
3)创建一个
NSDateFormatter
将日期转换为用户:

NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[serverFormatter setDateFormat:@"'at 'HH:mm' of 'dd/MM/yyyy"];
NSDate *theDate = [serverFormatter dateFromString:theString];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"HH:mm dd/MM/yyyy"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];
3)从userFormatter获取字符串:

NSDateFormatter *serverFormatter = [[NSDateFormatter alloc] init];
[serverFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
[serverFormatter setDateFormat:@"'at 'HH:mm' of 'dd/MM/yyyy"];
NSDate *theDate = [serverFormatter dateFromString:theString];
NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init];
[userFormatter setDateFormat:@"HH:mm dd/MM/yyyy"];
[userFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *dateConverted = [userFormatter stringFromDate:theDate];

我完全按照你在这里写的做了,得到了“HH:mm dd/mm/yyyyy”,结果,我在
[userFormatter setDateFormat:…]行中错误地添加了一个'。编辑并更正后,再次获取此行。现在显示的是完全相同的时间。我错过了什么?有没有“at”?检查最后一次编辑,我在其中添加了
[serverFormatter setTimeZone:[NSTimeZone TimeZoneWithAbRevision:@“GMT”]到第一部分我使用UTC,所以我做了“[serverFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:3600];”现在它工作正常。谢谢你的回答。这在每个时区都能正常工作,对吗?