如何将日期格式化为IST时区?

3

我需要将日期格式化为以下形式:

2014年7月19日 10:27:16 印度标准时间

如何实现?我应该将“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]);  

检查相同类型的问题。 - vishnuvarthan
http://eureka.ykyuen.info/2010/06/17/iphone-display-date-and-time-using-nsdateformatter/ - Iphonenew
我查看了stackoverflow.com/questions/9084980/... - @vishnuvarthan - 但是我收到的是inccu而不是IST! - Smitha
时区IST等同于时区+0530,因此您可以使用它,例如"19-JUL-2014 10:27:16 +0530" - holex
不,我必须将IST以NSDictionary的形式发送,以便发出服务请求以命中Web服务。 - Smitha
3个回答

3
我已经试过了几种时区格式化程序,参考了苹果公司官方文档和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" - 但这只是基于我的个人推测。


非常感谢,它帮了我很多! - Smitha
IST 也被用于爱尔兰标准时间和以色列标准时间。因此,你不能仅使用 IST。 - rckoenes

1
  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 zzz"];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

    NSLog(@"%@",[dateFormatter stringFromDate:sourceDate]);

这可能会帮助你。

这给了我 - GMT+5:30...我想要IST,即使这个时区是正确的。 - Smitha

0
请尝试这个:
NSDate *date= [NSDate date];
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"dd-MMM-yyyy HH:mm:ss z"];
NSLog(@"%@",[dateFormatter1 stringFromDate:date]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接