【问题标题】:Changing the current date更改当前日期
【发布时间】:2011-04-19 13:47:58
【问题描述】:

我正在处理我的 iPhone 开发中的日期。我需要将日期从当前日期增加 24 小时。

【问题讨论】:

  • 24 小时还是一天?不想看到另一个闹钟一年两次在错误的时间叫醒我 ;-)

标签: ios objective-c cocoa-touch nsdate


【解决方案1】:

您可以使用 dateByAddingTimeInterval

NSDate *currentDate = [NSDate date];
NSDate *datePlusOneDay = [currentDate dateByAddingTimeInterval:(60 * 60 * 24)]; //one day

【讨论】:

  • 不应该是NSDate *datePlusOneDay吗?
  • @NickWeaver 你是对的.. 但它已经由 Matthias 编辑了.. 谢谢
【解决方案2】:

简单:

NSDate *tomorrow = [[NSDate date] dateByAddingTimeInterval:86400];

【讨论】:

  • addTimeInterval 是 iOS4 中不推荐使用的方法
  • 感谢您指出这一点。我继续编辑我的答案。
【解决方案3】:

您可以添加一个 NSTimeInterval。由于这是以秒为单位的两倍,只需添加 24*60*60:

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds

【讨论】:

    【解决方案4】:

    试试

    NSDate *twentyFourHoursLater = [[NSDate alloc] initWithTimeIntervalSinceNow:60 * 60 * 24];
    

    【讨论】:

      【解决方案5】:

      在 NSUserdefaults 中保存下载日期,然后检查 24 小时是否已过? 如果不通知用户他/她将不得不等待。

      【讨论】:

      • NSUserdefaults 不是关键字,我没弄明白
      【解决方案6】:

      将上次下载日期保存在NSUserDefaults。当您尝试下载时,只需检查该日期。

      类似这样的:

      - (BOOL)downloadDataForecedUpdate:(BOOL)forced {
          NSDate *lastDownloadDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastDownloadDate"];
          if (forced || !lastDownloadDate || [[NSDate date] timeIntervalSinceDate:lastDownloadDate] > 24 * 60 * 60) {
              // start download
              [NSURLConnection connectionWithRequest:myDownloadRequest delegate:self];
              return YES;
          }
          return NO;
      }
      
      
      - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
          // process data
      
          [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"lastDownloadDate"];
      }
      

      您可以在任何合适的地方致电[self downloadDataForecedUpdate:NO]。在应用程序启动或 IBAction 中。使用该方法的返回值来显示下载指示器或告诉用户他必须等待更多的警报。

      【讨论】:

        【解决方案7】:

        根据您真正想要实现的目标,仅将 86,400(或 60 * 60 * 24 )添加到您的时间间隔可能不是您想要的。例如,如果用户经历了夏令时调整,那么如果它发生在午夜附近,您将休息一个小时,甚至一天。更好的方法是向 NSCalendar 询问结果,这会考虑到用户本地时区。

        NSDate *start = yourDate;
        NSDateComponents *oneDay = [NSDateComponents new];
        [oneDay setDay:1];
        
        NSCalendar *cal = [NSCalendar currentCalendar];
        NSDate *end = [cal dateByAddingComponents:oneDay toDate:start options:0];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多