【问题标题】:How do I convert from NSString to NSDate using NSDateFormater如何使用 NSDateFormater 从 NSString 转换为 NSDate
【发布时间】:2012-01-13 12:03:37
【问题描述】:
我有这个字符串:2012-01-12T21:01:00 和这个代码:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd hh:mm:ss a"];
NSDate* arrivalTime=[df dateFromString:field_arrival_time];
但它返回nil。我应该使用什么日期格式来解析这个字符串?
【问题讨论】:
标签:
objective-c
ios
cocoa-touch
nsdate
nsdateformatter
【解决方案1】:
您的字符串2012-01-12T21:01:00 包含文字T(至少我相信它是文字,它似乎并不表示时区)。您必须在日期格式中包含此内容。
[df setDateFormat:@"yyyy-MM-dd'T'hh:mm:ss"];
请注意日期格式中缺少a,使用它将要求您的输入字符串使用 AM 或 PM 前面有一个空格。有关NSDateFormatter 特殊字符的更多信息,请查看Date Formatting Guide,特别注意固定格式。
编辑:您的输入字符串未指定时区,当您通过NSLog() 输出时,它可能会被解释为 UTC 并本地化为您机器的时区。
【解决方案2】:
我在你的字符串上尝试了很多,但从未得到结果。控制台上只有 nil 显示。但是当我从你的字符串中删除字符“T”时,它会给出完美的结果。
[f setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [f dateFromString:@"2012-01-12 21:01:00"];
NSLog(@"date %@", date);
NSDateFormatter *f2 = [[NSDateFormatter alloc] init];
[f2 setDateFormat:@"dd-MM-yyyy"];
NSString *s = [f2 stringFromDate:date];
NSLog(@"S %@", s);
/// OutPut : S 12-01-2012