我有一个字符串,需要将其转换为日期,但它无法正确转换。我不知道为什么......我的代码是:
NSString * fecha = @"2011-12-07 11:11:29.657";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.ZZZ"];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:fecha];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned units = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *components = [calendar components:units
fromDate:dateFromString];
NSInteger* hour = [components hour];
NSInteger* minute = [components minute];
NSInteger* second = [components second];
NSLog(@"Fecha: %@",fecha);
NSLog(@"Format: %@",dateFormatter.dateFormat);
NSLog(@"date: %@",dateFromString);
在我的日志中:
2011-12-07 11:36:11.750 Catalogo-V1[13741:207] Fecha: 2011-12-07 11:11:29.657
2011-12-07 11:36:11.750 Catalogo-V1[13741:207] Format: yyyy-MM-dd HH:mm:ss.ZZZ
2011-12-07 11:36:11.751 Catalogo-V1[13741:207] date: (null)
答案 0 :(得分:12)
我认为代替格式字符串yyyy-MM-dd HH:mm:ss.ZZZ
,您需要yyyy-MM-dd HH:mm:ss.SSS
。
ZZZ将是时区值,而SSS是小数秒。
请参阅Unicode documentation(从Data Formatting上的Apple文档链接)
编辑:另一件事:你不需要行NSDate *dateFromString = [[NSDate alloc] init];
。只需致电NSDate *dateFromString = [dateFormatter dateFromString:fecha];
即可。日期格式化程序将根据需要分配日期对象。
答案 1 :(得分:4)
ZZZ
是一种时区格式,它正在寻找像CET
这样的东西而不是秒的小数部分。你想要SSS
@"yyyy-MM-dd HH:mm:ss.SSS"
http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns