我必须格式化日期如下:
2014年7月19日10:27:16 IST
我怎样才能做到这一点?我应该将“IST”作为字符串对象发送吗?
我试过了 -
NSDate* sourceDate = [NSDate date];
NSLog(@"Date is : %@", sourceDate);
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
NSLog(@"TimeZone is : %@", currentTimeZone);
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc]init] ;
dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss Z"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"%@",[dateFormatter stringFromDate:sourceDate]);
最佳答案
我已经根据Apple's official docs和Unicode date-formatter standards尝试了几种时区格式化程序的方案。
我这样设置时区:
NSTimeZone *_timezone = [NSTimeZone timeZoneWithName:@"IST"];
它使用
+0530
偏移量向我提供了正确的时区,因此用于我的NSDateFormatter
实例。NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc]init];
[_dateFormatter setTimeZone:_timezone];
这是有关我使用不同的format-scpecifiers的列表:
z
= GMT+0530 IST
zz
= GMT+0530 IST
zzz
= GMT+0530 IST
zzzz
= India Standard Time IST
zzzzz
= India Standard Time IST
似乎没有一个标准格式说明符只能以字符串形式提供实际的
"IST"
,匹配的是带有格式说明符"India Standard Time IST"
和zzzz
的zzzzz
–但是您可以看到"GMT+0530 IST"
仍然包含其余格式符。注意:其他格式说明符,例如
Z
,v
,V
,x
或X
似乎也没有用。我已经阅读了有关格式说明符的更多信息,文档中介绍了有关使用
z
的信息:简短的特定非位置格式(例如PDT)。在不可用的地方,请使用简短的本地化GMT格式。
对我来说,这意味着印度标准时间的实际短小特定非位置格式无法通过
NSDateFormatter
直接获得-或出于某种原因被指定为"GMT+0530 IST"
而不是短"IST"
†。另一方面,我不确定服务器端是否接受了长整型非位置格式(aka
"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"
的缩短格式,但这只是基于我个人的推测。