2015-03-13 45 views
0

我有一些日期字符串像这样:1/1/2010 10:34:11 PM,但我只想要MM/DD/YYYY格式。从NSString中删除空格后的字符

我试图通过使用像这样得到的字符串段之前“”:

NSRange range = [dates[i] rangeOfString:@" "]; 

NSString *newString = [dates[i] substringWithRange:NSMakeRange(0,range.location)]; 

但是,它不能正确地与空间rangeOfString工作。我怎样才能让这个工作正常?谢谢!

+0

使用日期格式创建从字符串的日期。使用另一个在日期格式中创建一个字符串。 – vikingosegundo 2015-03-13 13:41:25

+0

您发布的代码有什么问题?它应该工作正常。你不能解释你得到的结果有什么问题。 – rmaddy 2015-03-13 15:03:26

回答

1
NSString *dateString = @"1/1/2010 10:34:11 PM"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"dd/MM/yyyy hh:mm:ss aa"]; 

NSDate *date = [formatter dateFromString:dateString]; 

[formatter setDateFormat:@"dd/MM/yyyy"]; 

NSString *newDateString = [formatter stringFromDate:date]; 

// Output: 1/1/2010 
NSLog(@"new date string is %@", newDateString); 
+1

*咳嗽* https://developer.apple.com/library/ios/qa/qa1480/_index.html – Tommy 2015-03-13 13:53:49

+1

当所有OP想要的都是一个简单的子字符串时,这是巨大的矫枉过正。 – rmaddy 2015-03-13 15:04:06

2

不这样做。

只需使用NSDateFormatter。 从NSString转换为NSDate - >更改fromat - >转换为字符串。

0

虽然你可以使用NSDateFormatter,一个快速和肮脏的方法相似,你尝试过什么会使用[NSString componentsSeparatedByString:]

NSArray *dateParts = [dates[i] componentsSeparatedByString:@" "]; 
NSLog(@"%@", dateParts[0]); 
+0

当您只需要第一个值时,使用'componentsSeparatedByString'就会过度杀伤。只需获取第一个分隔符的范围,然后获取子字符串。效率更高。 – rmaddy 2015-03-13 15:02:47

+0

也许,但另一方面,它是一条线。 – 2015-03-13 15:10:14

+0

它实际上是两个写作。当然,它可以是一行,就像OP的代码可以是一行一样。那不是重点。您的答案最终扫描整个字符串作为分隔符,然后创建一个包含所有子字符串的数组。而所有你需要的是第一个。得到第一个分隔符(不是全部)的范围并提取单个子串是非常有效的。不需要数组,不需要扫描整个字符串,也不需要大量浪费的子字符串。 – rmaddy 2015-03-13 15:13:22