【问题标题】:How do I create the current date (or any date) as an NSDate without hours, minutes and seconds?如何将当前日期(或任何日期)创建为不带小时、分钟和秒的 NSDate?
【发布时间】:2011-01-28 20:05:06
【问题描述】:

我需要创建一个当前日期(或任何 NSDate)的NSDate,不包括小时、分钟和秒,并将其保留为NSDate,尽可能少的行?

我需要对日期执行一些计算,并且小时、分钟和秒会导致问题,我需要绝对日期(我希望绝对是正确的短语)。它适用于 iPhone 应用程序。

我正在使用[NSDate date] 创建日期,其中添加了小时、分钟和秒。此外,我在日期上增加了几个月,因为我在某些日期有 2300 小时,因此我认为这可以节省日光。

所以理想情况下,我需要一个函数来从 NSDates 创建绝对 NSDates。

我知道我之前问过类似的问题,但我需要以 NSDate 而不是字符串结束,而且我有点担心指定日期格式,例如yyyy等

【问题讨论】:

    标签: ios objective-c cocoa-touch nsdate


    【解决方案1】:

    首先,您必须了解,即使您从 NSDate 中删除小时、分钟和秒,它仍然代表一个时间点。你永远不会得到像2011-01-28 这样的NSDate 来代表一整天;它永远是2011-01-28 00:00:00 +00:00。这意味着您还必须考虑时区。

    这是一个方法(将作为NSDate 类别实现),它在与self 同一天的UTC 午夜返回NSDate

    - (NSDate *)midnightUTC {
        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        [calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    
        NSDateComponents *dateComponents = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
                                                       fromDate:self];
        [dateComponents setHour:0];
        [dateComponents setMinute:0];
        [dateComponents setSecond:0];
    
        NSDate *midnightUTC = [calendar dateFromComponents:dateComponents];
        [calendar release];
    
        return midnightUTC;
    }
    

    【讨论】:

    • 永远是 Ole,比我更容易找到答案! ;(一如既往的好答案。
    • 你不需要添加[dateComponents setHour:0];[dateComponents setMinute:0];[dateComponents setSecond:0];,因为你在dateComponents var中没有这个组件,NSDate将在00:00:00 +0000创建。
    【解决方案2】:
    NSDate *oldDate = [NSDate date];
    NSCalendarUnit requiredDateComponents = NSYearCalendarUnit| NSMonthCalendarUnit | NSDayCalendarUnit;    
    NSDateComponents *components = [[NSCalendar currentCalendar] components:requiredDateComponents fromDate:oldDate]; 
    NSDate *newDate = [[NSCalendar currentCalendar] dateFromComponents:components];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      • 2016-04-26
      • 2017-10-18
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多