首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析不同的字符串日期

如何解析不同的字符串日期
EN

Stack Overflow用户
提问于 2013-04-17 17:24:37
回答 1查看 475关注 0票数 0

在我的应用程序中,我使用NSXMLParser来解析提要。我也有一个pubDate,但有许多不同的字符串日期格式:

代码语言:javascript
复制
 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

下面是我的代码:

代码语言:javascript
复制
    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];

问题是:我如何才能调整上述所有的日期格式?有没有什么功能,或者我应该手动完成?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-17 19:41:21

这不是一个理想的解决方案,但应该可以工作,因为dateString没有任何关于时区的信息是协调世界时。

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16056310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档