month hours current objective-c cocoa nsdate nsdatecomponents

objective c - hours - NSDateComponents de un NSDate



swift add time to date (4)

¿Cómo obtengo los NSDateComponents de un solo NSDate? No quiero los componentes de la diferencia entre 2 fechas, solo los segundos, minutos, horas, día, mes y año de NSDate.


Hay un ejemplo en los documentos de Apple , Listado 3: Obteniendo los componentes de una fecha :

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

Tenga en cuenta que debe ''o'' juntar las unidades de calendario que desee en la llamada del método de components .


Según la Referencia de API de desarrollador de Apple, DateComponents tiene propiedades de instancia de second , minute , hour , day , month , year .

El siguiente código de Swift 3 Playground muestra cómo obtener los componentes de segundos, minutos, horas, días, meses y años de una instancia de Date usando DateComponents :

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(reflecting: seconds)) // prints Optional(33) print(String(reflecting: minutes)) // prints Optional(42) print(String(reflecting: hours)) // prints Optional(22) print(String(reflecting: day)) // prints Optional(17) print(String(reflecting: month)) // prints Optional(12) print(String(reflecting: 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


en Swift 2.x, los componentes que desea se pasan así.

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


usando el método de NSCalendar:

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

me gusta:

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