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
NSDateComponents
Todo lo que necesita se puede encontrar aquí:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendars.html
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