如何将日期格式化为IST?

时间:2014-07-24 08:27:26

标签: ios objective-c date nsdate nsdateformatter

我必须格式化日期如下:

19-JUL-2014 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]);  

3 个答案:

答案 0 :(得分:3)

我根据Apple's official docsUnicode date-formatter standards尝试了几种时区格式化程序。

我像这样进入了时区:

NSTimeZone *_timezone = [NSTimeZone timeZoneWithName:@"IST"];

通过+0530偏移为我提供了适当的时区,因此用于NSDateFormatter的实例。

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"提供为字符串,匹配为格式说明符"India Standard Time IST"zzzz的{​​{1}} - 但是你可以看到zzzzz仍然包含其他格式化程序。

注意:"GMT+0530 IST"ZvVx等其他格式说明符似乎也没用。


我已经阅读了有关格式说明符的更多信息,文档说明了如何使用X

  

短特定非位置格式(例如PDT)。如果不可用,则回退到短的本地化GMT格式

这对我来说,印度标准时间的实际短特定非位置格式不能直接通过z获取 - 或者出于某种原因指定为NSDateFormatter而不是短"GMT+0530 IST"

另一方面,我不确定服务器端是否接受长特定非位置格式(又名"IST"),或者时区必须标记为仅限字符串"India Standard Time IST"

我担心如果最新的格式是预期的,那么你只需要手动添加它,并且非常优雅,例如:

"IST"

注意:我也发现月份的名称也应该大写,我不确定这是另一个期望还是月份名称的通用大写(例如“Jul”,“Sep”等......)对于你的服务器端来说已经足够了 - 我没有注意在我当前的答案中将它们大写。


†我还没有找到任何标准来描述实际的短格式,所以根据unicode标准,我认为[_dateFormatter setDateFormat:@"dd-MMM-yyyy HH:mm:ss"]; NSString *_date = [[_dateFormatter stringFromDate:[NSDate date]] stringByAppendingString:@" IST"]; 应该是"IST"缩短的格式{ {1}} - 但这只是基于我个人的推测。

答案 1 :(得分: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]);

这可能对您有所帮助

答案 2 :(得分:0)

请试试这个,

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