【问题标题】:NSDateFormatter with RSS pubDateNSDateFormatter 与 RSS pubDate
【发布时间】:2011-09-10 16:27:18
【问题描述】:

我在将 rss pubdate 字符串转换为 NSDate 对象时遇到了一些问题。

<pubDate>Fri, 09 Sep 2011 15:26:08 +0200</pubDate>

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:currentDate];
NSLog(@"DateObject : '%@'", date);
[dateFormatter release];

我总是得到

 [44157:10d03] DateObject : '(null)'

【问题讨论】:

    标签: objective-c feedparser


    【解决方案1】:

    你需要:

    • dd 而不是 d,因为这一天是零填充的
    • ZZ 而不是 Z,因为它不包含时区缩写名称

    更多信息:http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns


    当我运行这个时:

    int main (int argc, const char * argv[]) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
        NSString *str = @"Fri, 09 Sep 2011 15:26:08 +0200";
    
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
        NSDate *date = [dateFormatter dateFromString:str];
        NSLog(@"DateObject : %@", date);
        [dateFormatter release];
    
        [pool drain];
        return 0;
    }
    

    我明白了:

    EmptyFoundation[19926:407] DateObject : 2011-09-09 13:26:08 +0000

    【讨论】:

    • 我以前从未使用过这个,但也许还有另一个问题,因为如果与 OP 代码一起使用,这似乎不起作用。一个quick test
    • With [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];它不会工作:-(
    • 我用空格和换行符修剪了我的 pubDate,现在它工作得几乎完美,但时间是 -2h,因为时区设置不正确。发布日期:星期一,2011 年 9 月 5 日 12:33:29 +0200 日期对象:2011-09-05 10:33:29 +0000
    • @Philippxp: NSDates 总是登录 GMT 时区,因为日期没有时区。它们是一个绝对时间点,独立于时区和日历而存在。所以10:33:20 +0000 12:33:20 +0200。日期正确。
    【解决方案2】:

    首先你可以试试下面的代码:

    NSString *str = @"Mon, 19 Oct 2015 14:27:28 +0800";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
    NSDate *date = [dateFormatter dateFromString:str];
    NSLog(@"DateObject : %@", date);
    

    但是,如果您的 DateObject 仍然是 null ,则您的语言环境没有正确定位 "en_US_POSIX" 格式。您需要更改您的语言环境。

    NSString *str = @"Mon, 19 Oct 2015 14:27:28 +0800";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"];
    NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    [dateFormatter setLocale:enUSPOSIXLocale];
    NSDate *date = [dateFormatter dateFromString:str];
    NSLog(@"DateObject : %@", date);
    

    结果是:

    日期对象:2015-10-19 06:27:28 +0000

    【讨论】:

      【解决方案3】:

      使用:

        NSArray *array=[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
      

      通过空格和换行符拆分 pubDate,然后使用数组的索引获取要显示的每个元素。

      【讨论】:

        【解决方案4】:

        我使用此代码来格式化 Wordpress RSS 提要日期:

         + (NSDate *)parseWordpressDate:(NSString *)dataWp {
        
            NSArray *array=[dataWp componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        
            //Tue, 04 Mar 2014 11:00:36 +0000
        
            //day = index 1, month = 2, year = 3
            NSString *yyear = [array objectAtIndex:3];
            NSString *mmonth = [array objectAtIndex:2];
            NSString *dday = [array objectAtIndex:1];
        
            NSDateFormatter *dateFormatterGMTAware = [[NSDateFormatter alloc] init];
            [dateFormatterGMTAware setDateFormat:@"yyyy-MMM-dd"];
                NSString *dateString = [NSString stringWithFormat:@"%@-%@-%@",yyear,mmonth,dday];
                NSDate *data = [dateFormatterGMTAware dateFromString:dateString];
                return data;
        
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-20
          • 1970-01-01
          • 2013-06-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-04
          • 1970-01-01
          相关资源
          最近更新 更多