从一个string创build一个NSDate

我有这样的NSString@"3/15/2012 9:15 PM" ,我想将其转换为NSDate ,我已经这样做了:

 NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"mm/dd/yyyy HH:mm"]; NSDate *date = [formatter dateFromString:]; NSLog(@"%@", date); // date = null 

你能帮我吗,谢谢。

使用以下解决scheme

 NSString *str = @"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"MM/dd/yyyy HH:mm a"; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@", date); 

编辑:对不起,格式应该如下:

 formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

显示的时间将是GMT时间。 所以,如果你添加/减去时区,那将是9:15 PM。

编辑:#2

使用如下。 你会得到确切的时间。

 NSString *str = @"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; formatter.timeZone = gmt; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@",date); 

你的格式化程序是错误的。 根据NSDateFormatter文档,它应该是“MM / dd / yyyy h:mm a”。 您也可能想要按date格式指导中所述设置区域设置:

如果您使用的是固定格式date,则应首先将date格式程序的语言环境设置为适合您固定格式的内容。 在大多数情况下,最好的语言环境是en_US_POSIX,这个语言环境专门devise用来产生美国英语结果,而不pipe用户和系统偏好。

尝试这个:

 NSString *str = @"3/15/2012 9:15 AM"; NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setLocale:enUSPOSIXLocale]; [formatter setDateFormat:@"MM/dd/yyyy h:mm a"]; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@",date); 

输出:

 2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000 

嗯 – 出于几个原因你出错了

  1. NSDateFormatter是严格的,你没有。
  2. 你没有提供str dateFromString:
 NSString* str = @"3/15/2012 9:15 PM"; NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; NSDate* date = [formatter dateFromString:str]; NSLog(@"%@",date); 
  NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init]; [dateformatter setDateFormat:@"MM/dd/yyyy"]; NSArray *firstSplit = [str componentsSeparatedByString:@" "]; NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]]; [dateformatter setDateFormat:@"mm:ss"]; NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]]; NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]); NSLog(@"%@",[dateformatter stringFromDate:dateSelected]);