Как я могу получить час и минуты от NSDate?
в моем приложении мне нужно получить час и минуту отдельно:
NSString *currentHour=[string1 substringWithRange: NSMakeRange(0,2)];
int currentHourInNumber=[currentHour intValue];
считают string1
содержит 11:59:13 AM
который исходит от datepicker.
здесь, Если я использую выше код, это нормально, чтобы получить час, если это больше, чем 9. Еще мне нужно изменить NSMakeRange(0,1)
чтобы получить час от 1 до 9.
есть какие-то методы, чтобы получить часы, минуты и т. д.?
заранее спасибо, пожалуйста, предоставьте мне пример кода.
8 ответов:
использовать NSDateFormatter преобразование
string1
наNSDate
, затем получить необходимое NSDateComponents: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 и 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
подробнее о dateformat находится на официальном сайте unicode
если он вам нужен только для представления в виде строки следующий код намного проще!--2-->
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"HH:mm"]; NSString *startTimeString = [formatter stringFromDate:startTimePicker.date];
Мне кажется, что это то, что вопрос после, нет необходимости в форматерах:
NSDate *date = [NSDate date]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:date]; NSInteger hour = [components hour]; NSInteger minute = [components minute];
NSDateComponents
все, что вам нужно, можно найти here:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendars.html
Если бы вы использовали библиотеку C, то это можно было бы сделать:
time_t t; struct tm * timeinfo; time (&t); timeinfo = localtime (&t); NSLog(@"Hour: %d Minutes: %d", timeinfo->tm_hour, timeinfo->tm_min);
и с помощью Swift:
var t = time_t() time(&t) let x = localtime(&t) println("Hour: \(x.memory.tm_hour) Minutes: \(x.memory.tm_min)")
дополнительные указания см.:http://www.cplusplus.com/reference/ctime/localtime/
С iOS 8, Apple представила вспомогательный метод для извлечения
hour
,minute
,second
иnanosecond
из объекта NSDate.С
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);
Свифт
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)") }
Swift 2.0
вы можете сделать следующее, Чтобы получить часы и минуты от даты:
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
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))
Пожалуйста, обратите внимание на приведение к строке в инструкции print, вы можете легко присвоить это значение переменным, например:
var hoursString = String(hour) var minutesString = String(minute)
затем вы можете объединить значения как это:
var compoundString = "\(hour):\(minute)" print(compoundString)