【问题标题】:Convert an NSArray of NSDate to an array of formatted dates as strings将 NSDate 的 NSArray 转换为格式化日期数组作为字符串
【发布时间】:2012-11-02 18:51:09
【问题描述】:

我在 NSDate 格式的 NSArray 中有一个非连续日期数组。我需要在数组中使用相同的日期集,但在格式为 dd/MM 的 NSString 中。我想我需要循环读取原始数组中的每个日期,将其转换为字符串并根据需要对其进行格式化,但我不知道如何逐步遍历原始数组。

NSError *error2;
NSArray *swim750mArray = [context executeFetchRequest:request2 error:&error2];
if (swim750mArray == nil) {
    NSLog(@"The fetch request2 returned an array == nil");
} else {
    NSLog(@"The fetch request2 returned an array...");
    NSLog(@"%@", swim750mArray);

NSArray *datesAsDates = [swim750mArray valueForKey:@"date"];
NSMutableArray* arrayOfDatesAsStrings = [NSMutableArray arrayWithCapacity:count];

    //SomeCode - Convert the Array of NSDates to a new Array of dates as NSStrings...

      for (int i=0; i<index; i++) {
           //get the date next NSDate from the array as: NSDate *dateAsDate...
           NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
           [dateFormat setDateFormat:@"dd/MM"];


         NSString *dateAsStr = [dateFormat stringFromDate:dateAsDate];

         [arrayOfDatesAsStrings addObject:dateAsStr];
        }

这个答案与我需要的很接近,只是它没有从现有数组中读取:How to use NSDate formatter with an array of dates?

请帮忙!非常感谢提前...

【问题讨论】:

    标签: objective-c ios for-loop nsdate


    【解决方案1】:

    使用fast enumeration怎么样?

    for (NSDate* dateAsDate in datesAsDates) {
         //get the date next NSDate from the array as: NSDate *dateAsDate...
         NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
         [dateFormat setDateFormat:@"dd/MM"];
    
         NSString *dateAsStr = [dateFormat stringFromDate:dateAsDate];
    
         [arrayOfDatesAsStrings addObject:dateAsStr];
    }
    

    【讨论】:

      【解决方案2】:

      jere 命名为快速枚举。也可以使用block-based enumeration 完成。还有你should create a formatter once and re-use it

      NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
      [dateFormater setDateFormat:@"dd/MM"];
      
      NSMutableArray *datesAsStrings = [NSMutableArray array];
      [datesAsDates enumerateObjectsUsingBlock:^(NSDate *date, NSUInteger idx, BOOL *stop){
           NSString *dateString = [dateFormater stringFromDate:date];
           [datesAsStrings addObject:dateString] 
      }];
      

      如果你想坚持使用 C-Style,那就去做

      NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
      [dateFormat setDateFormat:@"dd/MM"];
      for (int i=0; i< [datesAsDates count]; i++) {       
          NSString *dateAsStr = [dateFormat stringFromDate:[dateAsDate objectAtIndex:i]]; 
          [arrayOfDatesAsStrings addObject:dateAsStr];
      }
      

      但由于有变异保护,枚举是首选。

      【讨论】:

        猜你喜欢
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多