2011-01-25 10 views
8

Tengo time en formato string por ejemplo 2:00. Quiero inicializarlo a NSDate con el presente date. He intentado hacerInicialice un objeto NSDate con una hora específica

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

no soy capaz de comparar esto con un objeto de fecha. Por favor ayuda

Respuesta

30

Trate

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

usted debería ser capaz de comparar con la fecha después de eso.

Quizás quieras decir algo como. Creo que se establecerá usando la fecha de hoy y luego puedes crear NSDateComponents a partir de eso y establecer los valores de tiempo.

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

Gracias por la respuesta. Si hay una forma de configurar esto solo con el componente de tiempo, la fecha debe estar presente. ¿Será posible cambiar solo el componente de tiempo del objeto Date inicializado usando NSDate * mydate = [NSDate date] ; – agupta

+0

Creo que quieres decir algo como esto. – menapole

+0

Sí Gracias de nuevo por su rápida respuesta. – agupta

2

Es necesario utilizar un objeto NSCalendar para convertir a un NSDateComponentsNSDate. Consulte la documentación de Apple en Creating a Date from Components.

+0

Gracias por la respuesta. Será posible establecer el componente de tiempo de NSDate. Puedo obtener un objeto de NSDate inicializado para presentar la fecha y la hora. Después de eso, será posible cambiar el componente de tiempo. – agupta

+0

Use el mismo calendario para convertir el NSDate en NSDateComponents, luego configure la hora y luego use el calendario para volver a convertirlo en NSDate. –

+0

Gracias de nuevo por su respuesta. – agupta

3

Para inicializar un NSDate con la fecha actual en 2, deberá dividir un NSDate con componentes año, mes y día, p. Ej.

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

ajustar las horas a 2

weekdayComponents.hour = 2; 

y luego crear una nueva NSDate por aquellos componentes

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

Así que reúne a algunos de los C respuestas objetivas, I (ahora) tienen esta función de ayuda:

+ (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; 
} 
Cuestiones relacionadas