带有日期字符串的 NSString 的时区是什么



我在时区方面遇到问题,

所以问题来了:

我有一个格林威治标准时间的日期

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];

最新更新