Инициализируйте объект NSDate с определенным временем - PullRequest
9 голосов
/ 25 января 2011

У меня есть time в string формате, например 2:00.Я хочу инициализировать его на NSDate с настоящим date.Я пытался сделать

   NSDateComponents *comps = [[NSDateComponents alloc] init];
   [comps setHour:2];

Я не могу сравнить это с объектом даты.Пожалуйста, помогите

Ответы [ 5 ]

32 голосов
/ 25 января 2011

Попробуйте

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];

NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];

После этого вы сможете сравнить с датой.

Возможно, вы имеете в виду что-то подобное.Я думаю, что установит, используя сегодняшнюю дату, а затем вы можете создать NSDateComponents из этого и установить значения времени.

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =
                    [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
[weekdayComponents setHour:12];
[weekdayComponents setMinute:10];
[weekdayComponents setSeconds:30];
3 голосов
/ 19 сентября 2012

Чтобы инициализировать NSDate с текущей датой в 2, вам нужно разделить NSDate с компонентами год, месяц и день, например

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [gregorian
                                       components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
                                       fromDate:today];

Установите часы на 2

weekdayComponents.hour = 2;

А затем создайте новую NSDate этими компонентами

NSDate *todayAt2 = [gregorian dateFromComponents:weekdayComponents];
2 голосов
/ 25 января 2011

Вам необходимо использовать объект NSCalendar для преобразования NSDateComponents в NSDate.См. Документацию Apple по Создание даты из компонентов .

1 голос
/ 21 октября 2015
  func initializeDateWithTime(date:NSDate,hrs:Int,minutes:Int) -> NSDate{
    let today = date
     let gregorian:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
     let dateComponents = gregorian.components([.Year, .Month, .Day], fromDate: today)

     dateComponents.hour = hrs;
     dateComponents.minute = minute;


     let todayAtX = gregorian.dateFromComponents(dateComponents)
     return todayAtX!
}
0 голосов
/ 27 июля 2016

Просто собрав несколько ответов по Задаче C, я (сейчас) имею эту вспомогательную функцию:

+ (NSDate*)dateForTodayAtHour:(NSUInteger)hour andMinutes:(NSUInteger)minutes {
    NSDate* today = [NSDate date];
    NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents* weekdayComponents = [gregorian components:(NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear) fromDate:today];
    [weekdayComponents setHour:hour];
    [weekdayComponents setMinute:minutes];
    [weekdayComponents setSecond:0];
    NSDate* result = [gregorian dateFromComponents:weekdayComponents];
    return result;
}
...