我必须格式化日期如下:
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]);
答案 0 :(得分:3)
我根据Apple's official docs和Unicode 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"
,Z
,v
,V
或x
等其他格式说明符似乎也没用。
我已经阅读了有关格式说明符的更多信息,文档说明了如何使用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]);