【问题标题】:Trim NSDate to show date only修剪 NSDate 以仅显示日期
【发布时间】:2013-11-14 04:47:23
【问题描述】:

我已经解决了所有类似的问题,不幸的是无法解决我的问题,所以我问了它。我需要我的函数返回一个 NSDate 并且只有日期,但我的返回值也包含时间,我已经尝试了 setTimeStyle noStyle 和我能想出的所有可能的解决方案,这里是代码:

-(NSDate*)stringToDate{
    NSString *dateString = @"01-02-2010";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];
    NSDate *date;
    date = [dateFormatter dateFromString:dateString];
    NSLog(@"%@",date);
    return date;
} 

输出为:2010-01-31 16:00:00 +0000

我想要的:2010-01-31

【问题讨论】:

  • NSDate 必须有一个与之关联的时间,因为它始终是完整日期的一部分。使用 NSDateFormatter 输出时,可以将时间样式设置为无样式,然后输出 NSDateFormatter 给定的 NSString。
  • @hukir - 正确,正如许多其他人所说,没有办法拥有 NSDate 返回类型并修改为仅显示日期,所以我将其更改为 NSString 并尝试找出另一个解决方案。

标签: ios iphone objective-c nsdate nsdateformatter


【解决方案1】:

这不起作用,当您打印 NSDate 对象时,它将打印整个日期。 从日期获取字符串表示的方式是使用NSDateFormatter

NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"dd-MM-yyyy";

NSLog(@"%@", [format stringFromDate:[NSDate new]]);

如果你愿意,你可以把它放在 NSDate 上的一个类别中。

【讨论】:

  • 正确,我尝试获取 NSString 并且它有效,但我需要一个 NSDate 作为返回类型。所以我想我需要找出另一种解决方案,因为 NSDate 无法修剪。
  • @Ben 为什么这对您如此重要?只是好奇。
  • 我也想知道动机......理论上也是如此(不是说你应该这样做)但是在 NSDate 上创建一个类别覆盖- (NSString *) description 并让它打印出这个格式化的日期字符串; )
  • @trudyscousin 这是完整应用程序的一部分,我从 XML 文件中获取解析的数据,我想在表格视图中显示数据,其中日期将成为每个文件的标题部分。由于 xml 解析数据中可能有不止一个类似的日期,我需要将日期动态传递给 TableView 的部分。除非您看到完整的应用程序和代码,否则很难解释...
  • @Ben,你能把- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section的内容贴出来(如果你正在使用的话)我想看看我能不能帮你解决这个问题
【解决方案2】:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];

NSLog(@"%@",theDate);

【讨论】:

    【解决方案3】:

    NSDate 始终是日期和时间的组合。你不能改变这个的格式。但是如果你想要一个你提到的输出,你必须把它转换成NSString 只需添加以下代码

    NSLog(@"%@", [dateFormatter stringFromDate:date]);
    

    【讨论】:

      【解决方案4】:

      获取前 10 个字符的子字符串。看看NSMakeRangesubStringWithRange

      NSString* dateOnlyAsString = [[[NSDate date] description] substringWithRange:NSMakeRange(0, 10)];
      

      查看问题How to get substring of NSString?

      【讨论】:

      • 这不回答问题,这是做一个日期的子字符串,如果日期字符串是'2010-1-1'怎么办?
      • @cream-corn 看问题的最后两行。我这样回答。 NSDate 的description 方法的默认输出是ISO 8601 的样式(虽然不完全是)。这意味着前 10 个字符的日期包括前导零填充。为了绝对确定该格式,程序员可以指定一个格式化程序,就像原始海报所做的那样。
      【解决方案5】:
      NSDateFormatter *df = [[NSDateFormatter alloc] init];
          [df setDateFormat:@"dd-MM-yyyy"];
          NSDate *convertedDate = [df dateFromString:datestring1];
          NSLog(@"convertedDate....%@",convertedDate);
          [df setDateFormat:@"dd-MM-yyyy"];
          NSString     *date1= [df stringFromDate:convertedDate];
      

      【讨论】:

        【解决方案6】:
            UIDatePicker *datepicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 250, 320, 60)];
            datepicker.datePickerMode = UIDatePickerModeDate;
            NSDate *date = datepicker.date;
            NSDate *date1 = [NSDate date];
            NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
            [dateFormat setDateFormat:@"yyyy-MM-dd"];
        
            // convert it to a string
            NSString *dateString = [dateFormat stringFromDate:date1];
            NSLog(@"date %@",dateString);
            datelabel.text =dateString;
            NSLog(@"text in the datelabel.text is %@",datelabel.text);
        

        尝试按以下方式使用,效果很好。如果不起作用,请告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-11
          • 2016-06-11
          • 2017-10-20
          • 2023-03-13
          相关资源
          最近更新 更多