我在时区方面遇到问题,
所以问题来了:
我有一个格林威治标准时间的日期
2013-10-18 00:00:00 +0000
我把它转换为GMT-10
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT-10"]];
NSString *minusTenGMT = [formatter stringFromDate:date];
2013/10/17 02:00
它给了我一个字符串: 17/10/2013 02:00 PM
所以基本上减去TenGMT是一个带有字符串日期的字符串
如果我想获得负腾格林威治标准时间的 GMT 值。我应该逆转这个过程
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *origDate = [formatter dateFromString:minusTenGMT];
但问题是,这样做的结果是
2013-10-18 08:00:00 +0000 与原始日期相比: 2013-10-18 00:00:00 +0000
,根据我搜索的内容,这个字符串的时区会回到格林威治标准时间吗?发生了什么事情?。
但是如果我不使用 GMT 缩写,而是使用我的本地时区
[formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:[[NSTimeZone localTimeZone] abbreviation]]];
NSDate *origDate = [formatter dateFromString:minusTenGMT];
结果是 2013-10-18 00:00:00 +0000 与原始完全相同。
我的本地是GMT-10,我什至尝试通过ios模拟器和系统更改我的位置。当使用本地时,它们都会回到原始状态(这是正确的)。但如果格林威治标准时间,他们会给出不同的输出。
谁能告诉我发生了什么?我想知道如果我使用自己的时区而不是日期的原始时区,为什么它会起作用。
提前感谢:D。
编辑:修复了错别字。
困扰我的是,为什么在将其转换回 GMT 时要使用 GMT-10?
还是我太傻了,听不懂?我使用 GMT-10 格式来获得 GMT-10。
所以要从 GMT-10 获得 GMT,我应该使用 GMT 格式,但它不起作用,我需要使用 GMT-10 格式来获得 GMT。
我同意 rmaddy 请尝试在下面包含这一行:--
formatter setDateFormat:@"dd/MM/yyyy hh:mm a"];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:[[NSTimeZone localTimeZone] abbreviation]]];
NSString *minusTenGMT = [formatter stringFromDate:date];// this line you need to include for converting
NSDate *origDate = [formatter dateFromString:minusTenGMT];