2011-01-25 9 views
8

Mam time w formacie string na przykład 2:00. Chcę zainicjować go na NSDate z obecnym date. Próbowałem robićInicjalizuj obiekt NSDate o określonym czasie.

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

nie jestem w stanie porównać to z obiektem dat. Proszę o pomoc

Odpowiedz

30

Spróbuj

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

powinien być w stanie porównać z datą po tym.

Może masz na myśli coś takiego. Myślę, że ustawisz przy użyciu dzisiejszej daty, a następnie możesz utworzyć NSDateComponents z tego i ustawić wartości czasu.

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

Dzięki za odpowiedź. Czy istnieje sposób na ustawienie tego tylko z komponentem czasu data musi być obecna date. Będzie można zmienić tylko składnik czasu obiektu Date zainicjalizowany przy użyciu NSDate * mydate = [NSDate date] ; – agupta

+0

Myślę, że masz na myśli coś takiego. – menapole

+0

Tak, dziękuję jeszcze raz za szybką odpowiedź. – agupta

2

trzeba użyć obiektu NSCalendar przekonwertować NSDateComponents do NSDate. Zobacz dokumentację Apple na Creating a Date from Components.

+0

Dzięki za odpowiedź. Będzie można ustawić składnik czasu NSDate. Mogę uzyskać obiekt NSDate zainicjowany do przedstawienia daty i czasu. Po tym czasie można zmienić składnik czasu. – agupta

+0

Użyj tego samego kalendarza, aby przekształcić NSDate w NSDateComponents, a następnie ustaw czas, a następnie użyj kalendarza, aby przekształcić go z powrotem w NSDate. –

+0

Jeszcze raz dziękuję za odpowiedź. – agupta

3

Aby zainicjować NSDate z obecną datą na 2, musisz podzielić NSDate z komponentami rok, miesiąc i dzień, np.

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

Ustaw godzin 2

weekdayComponents.hour = 2; 

a następnie utworzyć nową NSDate przez tych składników

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

Wystarczy skupiających niektóre odpowiedzi Objective C, I (teraz) mają tę funkcję pomocnika:

+ (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; 
} 
Powiązane problemy