2011-08-04 15 views
10

. Mogę ustalić, jak uzyskać datę w pewnym zakresie, ale wydaje mi się, że nie można utworzyć daty w określonym czasie.Znajdź, czy aktualny czas mieści się w przedziale od

Jaki byłby najprostszy sposób sprawdzenia, czy [data NSDate] znajduje się w przedziale czasowym?

Chcę wyświetlać spersonalizowane powitanie jak następuje:

12 pm - 4: 59: 9999 pm @ "Dzień dobry, bla"
godzina siedemnasta - 11: 59: 9999 pm @” dobry wieczór, bla”
12 am - 11: 59: 9999 AM @ "Dzień dobry, bla"

Odpowiedz

49

Tak, możesz użyć numeru NSDateComponents, który zwróci godzinę w formacie 24-godzinnym.

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

Niestety nie mam głosów na dziś. Nice Odpowiedź jednak. –

+2

Nie mam głosów. +1. –

+0

Od wersji iOS8 należy użyć NSCalendarUnitHour, ale dobrą odpowiedź. –

1

Zastosowanie instancją NSCalendar stworzyć instancję NSDateComponents ze swojego NSDate, a potem po prostu sprawdzić godziny, minuty i sekunda własność NSDateComponents i przedstaw odpowiedni komunikat.

-1

Można po prostu użyć klasy NSDate chwycić czas na 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"); 

referencyjny: NSDate Documentation

+1

Więc co się wydarzy między 12:00 a 12: 59.9999 i 17.00 i 5: 59.9999 po południu? :) – Joe

+0

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

2

Aktualizacja dla 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

Noon jest 12:00. Po południu jest z 12:01 PM do około 5:00 PM. Wieczór jest z 5:01 PM na 8 PM lub około zachodu słońca. Noc jest od wschodu do zachodu słońca, więc od 8:01 PM do 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!"); 
Powiązane problemy