【问题标题】:NSDate : Add a day based on TimeNSDate :根据时间添加一天
【发布时间】:2011-11-10 04:33:22
【问题描述】:

在我的应用程序中,我得到了相同日期和结束时间的日期和开始时间。结束时间可能是第二天的时间。

example : Date : 11/01/2011
          start time : 5:30 PM
          end time :   4:30 AM (of next day morning)

我没有得到结束日期。

如何根据结束时间在开始日期中添加一天。我在 SO 上提到了很多答案,但找不到解决方案。

【问题讨论】:

  • 您的问题不清楚。您能否具体说明一些要点,例如您从哪里获得它以及您想如何更改日期。
  • 我正在使用 Web 服务从服务器获取它
  • 您好,这个问题的最终解决方案是什么。当您没有结束日期时。
  • @MnuMaster :请参阅下面的答案...因为我只想添加一天...

标签: iphone objective-c nsdate


【解决方案1】:

你应该使用这个功能

NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:86400];

这里的 86400 是 60(秒)*60(分钟)*24(小时)。
如果您的 startDate 不是当前日期,那么您可以使用此方法

- (id)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)anotherDate

现在你变成了这样

example : Date : 11/01/2011
          start time : 5:30 PM
          end time :   4:30 AM (of next day morning)

所以你可以有两个日期,分别代表开始时间和结束时间。使用以下方法获取时间间隔

- (NSTimeInterval)timeIntervalSince1970

现在你有两个不同日期的两个时间间隔,对吧?现在只需减去它,你就会得到你想要的。

【讨论】:

  • 我怎样才能得到 5:30 PM 到 4:40 AM 的 NSTimeInterval ?因为我没有凌晨 4:30 的日期???
  • 我没有两个日期。只有一个日期有开始时间和结束时间。现在根据结束时间,我必须计算结束时间是同一日期还是下一个日期的日期。
  • 这很简单,但一开始我听不懂你在说什么......
  • 还有一件事的结束时间改变了..应该是凌晨 4:30 但它给了下午 5 点!!!
  • 不不不不不!!!仅当您希望将 恰好 86,400 秒添加到时间点时,此方法才有用。使用此方法添加 1 天是不够的,因为并非每天都有 86,400 秒。您应该改用NSDateComponentsNSCalendar
【解决方案2】:

已解决:根据 Akkis 的回答...

    NSDate *startDate = [df dateFromString:startingDateTime];   
    NSDate *endDate = [df dateFromString:endingDateTime];

    NSComparisonResult result;
    result = [startDate compare:endDate];

    if(result == NSOrderedDescending)
    {
        NSLog(@"newDate is greater");

        endDate = [endDate dateByAddingTimeInterval:60*60*24];
    }

【讨论】:

    【解决方案3】:

    Dirty (NO DST check) 方法:将所有内容转换为常用单位(即 NSTimeInterval / 双秒)会更容易。检查结束时间是否小于开始时间(从午夜转换为秒)。从 endSeconds 中减去 startSeconds,如果结果为负数,则添加 24 小时的秒数 (24*60*60 = 86400)。将结果添加到开始日期/时间。

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 2018-06-13
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2011-01-20
      • 2016-10-31
      相关资源
      最近更新 更多