ios objective-c nsdate hour

ios - ¿Cómo obtengo hora y minutos de NSDate?



objective-c hour (8)

Con iOS 8, Apple introdujo un método auxiliar para recuperar la hour , minute , second y nanosecond de un objeto NSDate.

C objetivo

NSDate *date = [NSDate currentDate]; NSInteger hour = 0; NSInteger minute = 0; NSCalendar *currentCalendar = [NSCalendar currentCalendar]; [currentCalendar getHour:&hour minute:&minute second:NULL nanosecond:NULL fromDate:date]; NSLog(@"the hour is %ld and minute is %ld", (long)hour, (long)minute);

Rápido

let date = NSDate() var hour = 0 var minute = 0 let calendar = NSCalendar.currentCalendar() if #available(iOS 8.0, *) { calendar.getHour(&hour, minute: &minute, second: nil, nanosecond: nil, fromDate: date) print("the hour is /(hour) and minute is /(minute)") }

En mi aplicación necesito obtener la hora y el minuto por separado:

NSString *currentHour=[string1 substringWithRange: NSMakeRange(0,2)]; int currentHourInNumber=[currentHour intValue];

Considere que 11:59:13 AM contiene 11:59:13 AM que viene de datepicker.

Aquí si uso el código anterior, está bien obtener la hora si es mayor que 9. De lo contrario, necesito cambiar NSMakeRange(0,1) para obtener la hora entre 1 y 9.

¿Hay algún método para obtener la hora, los minutos, etc.?

Gracias de antemano, por favor proporcionen un código de muestra.


Esto me parece ser lo que está detrás de la pregunta, no hay necesidad de formateadores:

NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; NSInteger hour = [components hour]; NSInteger minute = [components minute];


Si solo lo necesita para presentarlo como una cadena, el siguiente código es mucho más fácil

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm"]; NSString *startTimeString = [formatter stringFromDate:startTimePicker.date];


Si tuviera que usar la biblioteca C, podría hacerlo:

time_t t; struct tm * timeinfo; time (&t); timeinfo = localtime (&t); NSLog(@"Hour: %d Minutes: %d", timeinfo->tm_hour, timeinfo->tm_min);

Y usando Swift:

var t = time_t() time(&t) let x = localtime(&t) println("Hour: /(x.memory.tm_hour) Minutes: /(x.memory.tm_min)")

Para obtener más información, consulte: http://www.cplusplus.com/reference/ctime/localtime/


Swift 2.0

let dateNow = NSDate() let calendar = NSCalendar.currentCalendar() let hour = calendar.component(NSCalendarUnit.Hour, fromDate: dateNow) let minute = calendar.component(NSCalendarUnit.Minute, fromDate: dateNow) print(String(hour)) print(String(minute))

Por favor, tome nota del lanzamiento a String en la declaración de impresión, puede asignar fácilmente ese valor a las variables, como este:

var hoursString = String(hour) var minutesString = String(minute)

Entonces puedes concatenar valores como este:

var compoundString = "/(hour):/(minute)" print(compoundString)


Use un NSDateFormatter para convertir string1 en un NSDate , luego obtenga los NSDateComponents requeridos:

Obj-C :

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"<your date format goes here"]; NSDate *date = [dateFormatter dateFromString:string1]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; NSInteger hour = [components hour]; NSInteger minute = [components minute];

Swift 1 y 2 :

let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "Your date Format" let date = dateFormatter.dateFromString(string1) let calendar = NSCalendar.currentCalendar() let comp = calendar.components([.Hour, .Minute], fromDate: date) let hour = comp.hour let minute = comp.minute

Swift 3 :

let dateFormatter = DateFormatter() dateFormatter.dateFormat = "Your date Format" let date = dateFormatter.date(from: string1) let calendar = Calendar.current let comp = calendar.dateComponents([.hour, .minute], from: date) let hour = comp.hour let minute = comp.minute

Más sobre el dateformat en el sitio oficial Unicode



Swift 2.0

Puede hacer lo siguiente para obtener horas y minutos de una fecha:

let dateFromat = NSDateFormatter() dateFromat.dateFormat = "hh:mm a" let date = dateFromat.dateFromString(string1) // In your case its string1 print(date) // you will get - 11:59 AM