【问题标题】:NSDateComponents of an NSDateNSDate 的 NSDateComponents
【发布时间】:2011-06-25 15:17:04
【问题描述】:

如何获取单个 NSDate 的 NSDateComponents?我不想要两个日期之间差异的组成部分,只是 NSDate 的秒、分、小时、日、月和年?

【问题讨论】:

    标签: objective-c cocoa nsdate nsdatecomponents


    【解决方案1】:

    Apple docs 中有一个示例,清单 3:获取日期的组件

    NSDate *today = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc]
                             initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents =
                        [gregorian components:(NSDayCalendarUnit | 
                                               NSWeekdayCalendarUnit) fromDate:today];
    NSInteger day = [weekdayComponents day];
    NSInteger weekday = [weekdayComponents weekday];
    

    请注意,您必须在调用 components 方法时将所需的 calendar units '或'在一起。

    【讨论】:

    • @martin Clayton,嗨,我已经为 NSDateComponents 设置了特定的时间、小时和秒,现在我想再次与这些 NSDateComponents 形成日期。我该怎么做?
    【解决方案2】:

    使用 NSCalendar 的方法:

    - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date

    喜欢:

    unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
    NSDate *date = [NSDate date];
    
    
    NSCalendar * cal = [NSCalendar currentCalendar];
    NSDateComponents *comps = [cal components:unitFlags fromDate:date];
    

    【讨论】:

      【解决方案3】:

      根据 Apple Developer 文档,DateComponents 具有 secondminutehourdaymonthyear 实例属性。以下 Swift 5 Playground 代码展示了如何使用 DateComponentsDate 实例中获取秒、分钟、小时、日、月和年组件:

      import Foundation
      
      var calendar = Calendar(identifier: .gregorian)
      calendar.timeZone = TimeZone(abbreviation: "CET")!
      let date = Date()
      
      // Get seconds, minutes, hours, day, month and year
      let components = calendar.dateComponents([.second, .minute, .hour, .day, .month, .year], from: date)
      let seconds = components.second
      let minutes = components.minute
      let hours = components.hour
      let day = components.day
      let month = components.month
      let year = components.year
      
      // Print components
      print(String(describing: seconds)) // prints Optional(33)
      print(String(describing: minutes)) // prints Optional(42)
      print(String(describing: hours)) // prints Optional(22)
      print(String(describing: day)) // prints Optional(17)
      print(String(describing: month)) // prints Optional(12)
      print(String(describing: year)) // prints Optional(2016)
      
      /* ... */
      
      // Set a formatter in order to display date
      let formatter = DateFormatter()
      formatter.dateStyle = .short
      formatter.timeStyle = .long
      formatter.timeZone = TimeZone(abbreviation: "CET")
      formatter.locale = Locale(identifier: "fr_FR")
      print(formatter.string(from: date)) // prints 17/12/2016 22:42:33 UTC+1
      

      【讨论】:

        【解决方案4】:

        在 Swift 2.x 中,你想要的组件是这样传递的。

        let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) 
        let weekdayHourMinutes = gregorianCalendar?.components([.Weekday, .Hour, .Minute], fromDate: date)
        

        【讨论】:

          猜你喜欢
          • 2011-10-02
          • 1970-01-01
          • 2012-04-23
          • 2013-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多