【问题标题】:Converting NSString to NSDate then sorting by NSDate returning null将 NSString 转换为 NSDate,然后按返回 null 的 NSDate 排序
【发布时间】:2013-11-11 09:53:45
【问题描述】:

在我的应用程序中,我将日期解析为来自 RSS 提要的字符串,并尝试按日期对它们进行排序。当我对字符串执行标准 sortDescriptor 时,它的排序很好,但是因为格式是“DD/MM/YYYY HH:MM:SS”,所以它是按天而不是整个日期排序的,所以我的列表不在按时间顺序。

因此,我试图将从 RSS 解析的日期字符串转换为 NSDate,然后按日期排序。但是,当我这样做时,它返回 null。谁能指出我哪里出错了?

        // Loop through XML data
    [rxml iterate:@"channel" usingBlock:^(RXMLElement *supportElement) {
        [supportElement iterate:@"item" usingBlock:^(RXMLElement *repElement) {

            // Assign element to string
            NSString *title = [repElement child:@"title"].text;
            NSString *description = [repElement child:@"description"].text;
            NSString *imageurl = [repElement child:@"image"].text;
            NSString *mystartDate = [repElement child:@"start_date"].text;
            NSString *myendDate = [repElement child:@"end_date"].text;


            // DESCRIPTION FORMATTING
            description = [customStringParser parseHTML:description];
            description = [customStringParser parseLinesMultiple:description];
            description = [customStringParser removeSocialSignifiers:description];
            currentFeed.description = description;

            // DATE FORMATTING

            NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
            [dateFormatter setDateFormat:@"DD/MM/YYYY HH:MM:SS"];
            [dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
            NSDate *startDate = [dateFormatter dateFromString:mystartDate];
            NSDate *endDate = [dateFormatter dateFromString:myendDate];

            currentFeed.startDate = startDate;
            currentFeed.endDate = endDate;


            NSLog(@"%@", startDate);
            NSLog(@"%@", endDate);


            // Add a new object to the feeds array
            [eventsFeeds addObject:currentFeed];
        }];
        [loadingView removeFromSuperview];
        [self.loadingIndicator stopAnimating];


        //sort array
        NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:NO];
        [eventsFeeds sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]];

我也相信我可能必须将 NSDate 转换回字符串,以便可以在视图控制器上的 detailTextLabel 中打印它,这是正确的吗?谢谢。

【问题讨论】:

  • 能否请您发布一个来自 RSS Feed 源的示例日期字符串?
  • “2013 年 1 月 1 日”与“DD/MM/YYYY HH:MM:SS”不匹配
  • 对不起,在我的问题中犯了一个小错误。从 RSS Feed 源,它以 DD/MM/YYYY HH:MM:SS 的形式出现。我在应用程序中有一些代码可以将其转换为 dd MMM yy 但我现在已经删除了。
  • 您的日期格式严重不正确。
  • (您要求“一年中的一周”日历的年/月/年,小时:月:百分之一秒。请参阅unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns.

标签: ios objective-c sorting nsstring nsdate


【解决方案1】:
NSArray *arr = [folderContent sortedArrayUsingFunction:dateSort context:nil];



//The date sort function



NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {


NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd-MM-yyyy HH:mm:ss"];

NSDate *d1 = [formatter dateFromString:[s1 substringFromIndex:[s1 length]-19]];
NSDate *d2 = [formatter dateFromString:[s2 substringFromIndex:[s2 length]-19]]; 

//  return [d1 compare:d2]; // ascending order
return [d2 compare:d1]; // descending order
 }

【讨论】:

    【解决方案2】:

    你应该改变:

    [dateFormatter setDateFormat:@"DD/MM/YYYY HH:MM:SS"];
    

    [dateFormatter setDateFormat:@"dd MMM yyyy"];
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2017-04-23
      • 2021-09-11
      相关资源
      最近更新 更多