2011-08-04 13 views
10

Puedo encontrar cómo obtener una fecha entre un rango, pero no puedo ver cómo crear una fecha en un momento específico.Buscar si la hora actual está entre un rango

¿Cuál sería la forma más sencilla de ver si [NSDate date] está entre un rango de tiempo?

Quiero mostrar un saludo personalizado como el siguiente:

12 pm - 4: 59: 9999 pm @ "Buenas tardes, foo"
17:00 - 11: 59: 9999 pm @" buenas noches, foo"
12 a.m. - 11: 59: 9999 am @ "Buenos días, foo"

Respuesta

49

Sí, puede usar NSDateComponents, que devolverá la hora en el formato de 24 horas.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit fromDate:[NSDate date]]; 
NSInteger hour = [components hour]; 

if(hour >= 0 && hour < 12) 
    NSLog(@"Good morning, foo"); 
else if(hour >= 12 && hour < 17) 
    NSLog(@"Good afternoon, foo"); 
else if(hour >= 17) 
    NSLog(@"Good evening, foo"); 

Swift 3

let hour = Calendar.current.component(.hour, from: Date()) 

if hour >= 0 && hour < 12 { 
    print("Good Morning") 
} else if hour >= 12 && hour < 17 { 
    print("Good Afternoon") 
} else if hour >= 17 { 
    print("Good Evening") 
} 
+0

Lamentablemente estoy agotado para hoy. Buena respuesta, sin embargo. –

+2

No me he quedado sin votos. +1. –

+0

A partir de iOS8 necesita utilizar NSCalendarUnitHour, pero es una buena respuesta. –

1

utilizar una instancia NSCalendar crear una instancia de NSDateComponents de su NSDate, a continuación, sólo comprobar las horas, los minutos y segundos propiedad del NSDateComponents y presente el mensaje apropiado.

-1

Se podía utilizar la clase NSDate para agarrar el momento en el iPhone.

NSDate * today = [NSDate date]; 
NSCalendar * cal = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; 

NSDateComponents * comps = [cal components:NSHourCalendarUnit fromDate:today]; 

if ([comps hour]>0 && [comps hour] < 12) 
    NSLog(@"Good morning, foo"); 

if ([comps hour] > 12 && [comps hour] < 17) 
    NSLog(@"Good afternoon, foo"); 

if ([comps hour] >17 && [comps hour]<24 ) 
    NSLog(@"Good evening, foo"); 

Referencia: NSDate Documentation

+1

Entonces, ¿qué va a pasar entre las 12:00 p.m. y las 12: 59.9999 p.m. y las 5 p.m. y 5: 59.9999 p.m.? :) – Joe

+0

lol ............... – Legolas

2

Actualizado para la Swift 3,0

let hour = Calendar.current.component(.hour, from: Date()) 

if hour >= 0 && hour < 12 { 
    print("Good Morning") 
} else if hour >= 12 && hour < 17 { 
    print("Good Afternoon") 
} else if hour >= 17 { 
    print("Good Evening") 
} 
0

mediodía está en 24:00. Tarde es de 12:01 PM a alrededor de 5:00 PM. Evening es de 5:01 PM a 8 PM, o alrededor del atardecer. Noche es desde el atardecer hasta el amanecer, por lo que desde 8:01 PM hasta 5:59 AM.

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour fromDate:[NSDate date]]; 
[components setTimeZone:[NSTimeZone localTimeZone]]; 
NSInteger hour = [components hour]; 

if(hour >= 6 && hour < 12) 
    NSLog(@"Good morning!"); 
else if(hour >= 12 && hour < 17) 
    NSLog(@"Good afternoon!"); 
else if(hour >= 17 && hour < 20) 
    NSLog(@"Good evening!"); 
else if((hour >= 20) || (hour >= 0 && hour < 6)) 
    NSLog(@"Good night!"); 
Cuestiones relacionadas