2011-01-25 2 views
8

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

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

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

ответ

30

Попробуйте

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

Спасибо за ответ. Есть ли способ установить это только с компонентом времени, дата должна быть представлена ​​date.Will будет возможно изменить только компонент времени объекта Date, инициализированный с использованием NSDate * mydate = [NSDate date] ; – agupta

+0

Я думаю, вы имеете в виду что-то вроде этого. – menapole

+0

Да Еще раз спасибо за ваш быстрый ответ. – agupta

2

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

+0

Спасибо за ответ. Будет возможно установить временной компонент NSDate.I может получить объект NSDate, инициализированный для представления даты и времени. После этого можно будет изменить компонент времени. – agupta

+0

Используйте тот же календарь, чтобы превратить NSDate в NSDateComponents, затем установите время, затем используйте календарь, чтобы вернуть его обратно в NSDate. –

+0

Еще раз спасибо за ваш ответ. – agupta

3

Чтобы инициализировать 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]; 
1
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

Просто объединяющих некоторые объективные ответы C, I (теперь) имеют эту вспомогательную функцию:

+ (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; 
} 
Смежные вопросы