如何解析不同的字符串日期
问题描述:
在我的应用程序即时通讯使用NSXMLParser解析提要。 我有一个pubdate的很好,但在许多不同的字符串日期格式:如何解析不同的字符串日期
1. 2013-04-17T12:00:24
2. Wed, 17 Apr 2013 10:15 +0300
3. Wed, 17 Apr 2013 11:07:01 +0200
4. 11/04/2013 18:10:10
这里是我的代码:
NSDateFormatter *inputFormatter = [[NSDateFormatter alloc]init];
assert(inputFormatter != nil);
NSLocale *loacle = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
assert(loacle != nil);
[inputFormatter setLocale:loacle];
[inputFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
[inputFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSString *dateString = [NSString stringWithFormat:@"%@",currentPubDate];
NSDate *inputDate = [inputFormatter dateFromString:dateString];
NSLocale *hebrow = [[NSLocale alloc]initWithLocaleIdentifier:@"he_IL"];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc]init];
outputFormatter.locale = hebrow;
[outputFormatter setDateStyle:NSDateFormatterFullStyle];
[outputFormatter setTimeStyle:NSTimeZoneNameStyleShortStandard];
NSString *outputDate = [outputFormatter stringFromDate:inputDate];
问题是:我如何调整日期格式上述所有的? 有任何功能,或者我应该手动吗?
在此先感谢!
答
这不是一个理想的解决方案,但应该工作,因为dateString没有关于时区的任何信息是UTC。
NSString *dateString = @"11/04/2013 18:10:10";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
NSLocale *enUSPOSIX = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIX];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date = nil;
NSError *error = nil;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate
error:&error];
NSArray *matches = [detector matchesInString:dateString
options:0
range:NSMakeRange(0, [dateString length])];
for (NSTextCheckingResult *match in matches) {
if (match.date) {
date = match.date;
break;
}
}
if (!date) {
NSArray *dateFormats = @[@"yyyy-MM-dd'T'HH:mm:ss",
@"EEE, dd MMM yyyy HH:mm Z",
@"EEE, dd MMM yyyy HH:mm:ss Z",
@"dd/MM/yyyy HH:mm:ss"];
for (NSString *dateFormat in dateFormats) {
[dateFormatter setDateFormat:dateFormat];
date = [dateFormatter dateFromString:dateString];
if (date) {
break;
}
}
}
NSLocale *hebrowLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"he_IL"];
[dateFormatter setLocale:hebrowLocale];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"DateString : %@",formattedDateString);
最好的方法是给pubDate一个dateFormat,如果你不能这样做的话。写一个循环将继续尝试可能的dateFormats,直到有效日期由dateFormatter形成。 – Anupdas
是的,我知道最好的办法是给单一的dateFormat。 但正如我所说我从解析的XML许多dateFormat,所以我需要找到一种方法来处理它们.. – OshriALM