NSDateComponents of an NSDate NSDateComponents of an NSDate objective-c objective-c

NSDateComponents of an NSDate


There's an example in the Apple docs, Listing 3: Getting a date’s components:

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];

Note that you have to 'or' together the calendar units you want in the call of the components method.


using NSCalendar's method:

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

like:

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


According to Apple Developer documentation, DateComponents has second, minute, hour, day, month, year instance properties. The following Swift 5 Playground code shows how to get seconds, minutes, hours, day, month and year components from a Date instance using DateComponents:

import Foundationvar calendar = Calendar(identifier: .gregorian)calendar.timeZone = TimeZone(abbreviation: "CET")!let date = Date()// Get seconds, minutes, hours, day, month and yearlet components = calendar.dateComponents([.second, .minute, .hour, .day, .month, .year], from: date)let seconds = components.secondlet minutes = components.minutelet hours = components.hourlet day = components.daylet month = components.monthlet year = components.year// Print componentsprint(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 datelet formatter = DateFormatter()formatter.dateStyle = .shortformatter.timeStyle = .longformatter.timeZone = TimeZone(abbreviation: "CET")formatter.locale = Locale(identifier: "fr_FR")print(formatter.string(from: date)) // prints 17/12/2016 22:42:33 UTC+1