可能重复:
Converting mutliple date format into a single format in iPhone
我正在尝试解析RSS并从RSS的内容部分提取日期的NSString,并将其转换为NSDate。以下是我到目前为止的情况:
RSS内容始终将时间列为时间:日期/时间到结束时间。我首先扫描RSS中的每个项目,以获取When:和'to'部分之间的内容。然后我设置了一个NSDateFormatter。这是问题所在。有时它被列为2013年9月6日星期四下午1点,但在其他时候,使用的格式是2013年9月6日星期四下午1点。所以...我需要解决的问题是设置一些内容,这样无论日期的格式如何,它都能够返回一些东西,因为现在使用“EEE MMM dd,yyyy h:mma”会遗漏出实例只是说下午1点。
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:articleImage];
[scanner scanUpToString:@"When: " intoString:nil]; // Scan all characters before #
NSString *substring = nil;
[scanner scanString:@"When: " intoString:nil]; // Scan the # character
if([scanner scanUpToString:@" to" intoString:&substring]) {
// If the space immediately followed the #, this will be skipped
//[substrings addObject:substring];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// this is imporant - we set our input date format to match our input string
// if format doesn't match you'll get nil from your string, so be careful
[dateFormatter setDateFormat:@"EEE MMM dd, yyyy h:mma"];
NSDate *dateFromString = [[NSDate alloc] init];
// voila!
dateFromString = [dateFormatter dateFromString:substring];
self.thetruedate = dateFromString;
[dateFormatter release];
NSLog(@"%@",dateFromString);
[substrings release];
}
答案 0 :(得分:2)
在RSS中定义一个包含所有可能日期格式的方法,
- (NSDate *)dateFromSourceString:(NSString *)sourceString {
NSDate *convertedDate = nil;
NSArray *dateFormatterList = [NSArray arrayWithObjects:@"EEE MMM dd, yyyy h:mma",
@"EEE MMM dd, yyyy ha", nil];//include all possible dateformats here
//sourceString = @"Thu Sep 6, 2013 1:00PM";
if (sourceString) {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
for (NSString *dateFormatterString in dateFormatterList) {
[dateFormatter setDateFormat:dateFormatterString];
NSDate *originalDate = [dateFormatter dateFromString:sourceString];
if (originalDate) {
convertedDate = originalDate;
NSLog(@"Converted date is %@", convertedDate);
break;
}
}
[dateFormatter release]; //release it if it is a non-arc project
}
return convertedDate;
}
然后将其用作
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:articleImage];
[scanner scanUpToString:@"When: " intoString:nil]; // Scan all characters before #
NSString *substring = nil;
[scanner scanString:@"When: " intoString:nil]; // Scan the # character
if([scanner scanUpToString:@" to" intoString:&substring]) {
// If the space immediately followed the #, this will be skipped
//[substrings addObject:substring];
// this is imporant - we set our input date format to match our input string
// if format doesn't match you'll get nil from your string, so be careful
NSDate *dateFromString = [self dateFromSourceString:substring];
self.thetruedate = dateFromString;
NSLog(@"%@",dateFromString);
[substrings release];
}
dateFromSourceString
方法将从dateFormatterList
中选择日期格式化程序,并尝试转换为日期。如果格式不正确,则返回nil。这可以在您的情况下使用。
答案 1 :(得分:0)
您可以在RSS中创建所有可能的日期格式类型。
继续逐个转换每个日期格式器,直到转换日期不是null
。由于无效格式无法转换并返回null。