【问题标题】:NSTimeInterval of today with time zero (midnight)今天的 NSTimeInterval 时间为零(午夜)
【发布时间】:2013-05-19 10:50:27
【问题描述】:

如何计算今天的 NSTimeInterval 时分秒为零?

我知道今天的 NSTimeInterval 是这样的:

NSTimeInterval  today = [[NSDate date] timeIntervalSince1970];

但是我怎样才能重新设置时间呢?

【问题讨论】:

  • 什么?...我有今天的 nstimeinterval,但我想将它设置为今天的 00:00:00...

标签: iphone ios nsdate nstimeinterval


【解决方案1】:
NSDate *currentDate = [NSDate date];
NSDateComponents *currentDateComponents = [calendar components:NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:currentDate];
NSDateComponents *currentDateToMidnight = [[NSDateComponents alloc] init];
[currentDateToMidnight setHour:-[currentDateComponents hour]];
[currentDateToMidnight setMinute:-[currentDateComponents minute]];
[currentDateToMidnight setSecond:-[currentDateComponents second]];
NSDate *midnight = [calendar dateByAddingComponents:currentDateToMidnight toDate:currentDate options:0];
NSTimeInterval todayTimeInterval = [midnight timeIntervalSince1970];

【讨论】:

  • 这有点矫枉过正,不是吗?只需将currentDateComponents 的小时、分钟和秒设置为 0,然后询问日历NSDate 会是什么。
【解决方案2】:

您需要使用NSDateComponents 仅获取今天的年月日,然后您可以从中创建一个日期,即午夜。

【讨论】:

    【解决方案3】:

    一旦你有NSTimeIntervalnow 调用以下函数:

    inline NSTimeInterval trimTimeInterval(NSTimeInterval interval)
    {
        static NSTimeInterval const day = 3600 * 24;
        return day * floor(interval / day);
    }
    

    首先我们计算interval 中的整数天数,然后返回相同的值,但时间元素除外。

    但是请注意,此代码不会考虑时区。因此,对于 GMT+N>0,您可能会以 5 月 23 日而不是 5 月 24 日结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 2020-09-30
      • 2012-03-31
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 2021-09-23
      相关资源
      最近更新 更多