我已经试过了几种时区格式化程序,参考了苹果公司官方文档和Unicode日期格式标准。我用以下方式初始化了时区:
NSTimeZone *_timezone = [NSTimeZone timeZoneWithName:@"IST"]
在我的NSDateFormatter
实例中,我希望你能为我提供适当的时区,并使用+0530
偏移量来呈现它。
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc]init]
[_dateFormatter setTimeZone:_timezone]
以下是我使用不同格式说明符的经验列表:
- `z` = `GMT+0530 IST`
- `zz` = `GMT+0530 IST`
- `zzz` = `GMT+0530 IST`
- `zzzz` = `India Standard Time IST`
- `zzzzz` = `India Standard Time IST`
似乎没有标准格式说明符可以提供实际的 `"IST"` 字符串,只有使用格式说明符 `zzzz` 和 `zzzzz` 才能匹配到 `"India Standard Time IST"`,但是你可以看到 `"GMT+0530 IST"` 仍然包含了其余的格式说明符。
注意:其他格式说明符如 `Z`、`v`、`V`、`x` 或 `X` 等也似乎没有用处。
我阅读了更多关于格式说明符的文档,其中关于使用 `z` 的说法如下:
“短特定非位置格式(例如 PDT)。如果不可用,则回退到短本地化 GMT 格式。”
这对我来说意味着,对于印度标准时间而言,实际的短特定非位置格式不能直接通过 `NSDateFormatter` 获得,或者由于某种原因被指定为 `“GMT+0530 IST”` 而不是短的 `“IST”`†。
另一方面,我不确定您的服务器端是否接受长特定非位置格式(即 `“India Standard Time IST”`),还是时区必须仅由字符串 `“IST”` 标记。
如果只期望使用最新的格式,您可能需要手动而不是优雅地添加它,例如:
[_dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss"];
NSString *_date = [[_dateFormatter stringFromDate:[NSDate date]] stringByAppendingString:@" IST"];
注意: 我也发现月份名称应该大写,不确定这是否是另一个期望值,或者月份名称的通用大小写(例如“Jul”,“Sep”等)是否足够适用于您的服务器端 - 我没有在当前答案中处理它们的大写。
† 我没有找到任何标准来描述实际的短格式,所以根据Unicode标准,我认为"IST"
应该是缩写格式,而不是"GMT+0530 IST"
- 但这只是基于我的个人推测。
IST
等同于时区+0530
,因此您可以使用它,例如"19-JUL-2014 10:27:16 +0530"
。 - holex