【问题标题】:Issue with NSDateNSDate 的问题
【发布时间】:2017-03-02 09:22:20
【问题描述】:

我有一个格式为 2018-01-19 18:30:00 +0000 的 NSDate 对象。现在我只想更改时间组件。更改时间组件后,NSDate 对象将为 2018-01-19 10:00:00。我确实尝试了各种解决方案,但没有任何效果。如果有人对此问题有任何解决方案,请提供帮助。提前谢谢你

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components: NSCalendarUnitYear| NSCalendarUnitMonth| NSCalendarUnitDay fromDate:date];

[components setHour:hour];
[components setMinute:minute];
[components setSecond:second];
NSDate *newDate = [calendar dateFromComponents:components];

我尝试的另一个解决方案是

  NSDate *oldDate = date; 
  unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
  NSCalendar *calendar = [NSCalendar currentCalendar];
  NSDateComponents *comps = [calendar components:unitFlags fromDate:oldDate];
  comps.hour   = 10;   
  comps.minute = 00;
  comps.second = 00;
  NSDate *newDate = [calendar dateFromComponents:comps];

每次我得到输出都是输入日期的下一个日期

【问题讨论】:

  • 您想像这样更改日期 2018-01-19 10:00:00 对吗?
  • 旧日期和新日期有什么联系?
  • 如何输出日期?
  • 您希望输入日期的输出是什么?
  • @Dhivya 是的,正是我想要的

标签: ios objective-c nsdate


【解决方案1】:

您可以在创建新的 NSDate 对象时更改时间组件:

NSDate *date = [calendar dateBySettingHour:10 minute:0 second:0 ofDate:[NSDate date] options:0];

答案来自:https://stackoverflow.com/a/5611700/4535184


【讨论】:

    【解决方案2】:

    这是您的代码,只需添加 dateformater 来格式化日期

    NSDate *oldDate = [[NSDate alloc]init];
    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comps = [calendar components:unitFlags fromDate:oldDate];
    comps.hour   = 10;
    comps.minute = 00;
    comps.second = 00;
    NSDate *newDate = [calendar dateFromComponents:comps];
    NSDateFormatter *formater = [[NSDateFormatter alloc]init];
    formater.dateFormat = @"YYYY-MM-dd hh:mm:ss";
    NSLog(@"New Date : %@",[formater stringFromDate:newDate]);
    

    【讨论】:

      【解决方案3】:

      试试这个

      NSDateFormatter *formatter = [NSDateFormatter new];
      [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzzz"];
      NSDate *date = [formatter dateFromString:@"2018-01-19 18:30:00 +0000"];
      NSCalendar *calendar = [NSCalendar currentCalendar];
      NSDateComponents *components = [calendar components: NSCalendarUnitDay| NSCalendarUnitHour| NSCalendarUnitMinute|NSCalendarUnitDay|NSCalendarUnitMonth|NSCalendarUnitYear  fromDate:date];
      [components setHour:10];
      [components setMinute:0];
      [components setSecond:0];
      NSDate *newDate = [calendar dateFromComponents:components];
      [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
      NSLog(@"%@",[formatter stringFromDate:newDate]);
      

      【讨论】:

      • @kishan 如果您想以 24 小时格式输出,则格式应为 yyyy-MM-dd HH:mm:ss 否则应为 yyyy-MM- dd hh:mm:ss a
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      相关资源
      最近更新 更多