2013-02-22 11 views
12

Uygulamam başlatıldığında, tarihin 9: 00-18: 00 arasında olup olmadığını kontrol etmek istiyorum.Şuanki tarihin 9: 00-18: 00 arasında olup olmadığını nasıl kontrol edebilirim

Ve şimdi NSDate kullanarak zaman alabilirim. Zamanı nasıl kontrol edebilirim? 09:00 için

+0

Tarihin diğer iki tarih arasında olup olmadığını görmek için bağlantıya bakın: http://stackoverflow.com/a/1072993/2092007 –

+0

@kshin thankyou linkiniz için farklıdır, çünkü bu belirli bir şey değildir. gün veya ay, bu "bugün" s 9: 00-18: 00 – Relex

+2

Her zaman bugün dünyanın bir yerinde 9:00 ve 18:00 arasında. :) – nickgrim

cevap

19

Pek çok cevaplar ve pek çok kusurları ...

You NSDateFormatter kullanabilirsiniz Bir tarihten kullanıcı dostu bir dize almak için. Amaçok bu dize tarih karşılaştırmaları için kullanmak için kötü bir fikir! vb bir buluşmamız yıl, ay, gün, saat, dakika, hakkında bilgi almak istiyorsanız
Eğer NSCalendar ve NSDateComponents kullanmalıdır, dizeleri kullanarak içerir sorunuza ...

herhangi bir cevap yok sayın. aşağıdakileri yapabilirsiniz 9:00 ila 18:00 bir tarih olup olmadığını kontrol etmek için

:

NSDate *date = [NSDate date]; 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *dateComponents = [calendar components:NSHourCalendarUnit fromDate:date]; 

if (dateComponents.hour >= 9 && dateComponents.hour < 18) { 
    NSLog(@"Date is between 9:00 and 18:00."); 
} 

DÜZENLEME:
Whoops, dateComponents.hour <= 18 kullanarak tarihlerde yanlış sonuçlara neden olur 18:01 gibi. dateComponents.hour < 18 gitmenin yoludur. ;)

+0

Güzel bir +1 ve bunun için kabul edilen cevap olmalı :) –

+0

Evet, bu en iyi çözümdür, ancak bu, stackoverflow'dur ve bu, mutlaka böyle kabul edilmeyeceği anlamına gelir ... – trojanfoe

+0

Evet haklısınız, iyi cevap – Relex

6

Construct tarihleri ​​ve 18:00 bugün ve bu tarihleri ​​ile geçerli saati karşılaştırmak:

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *now = [NSDate date]; 
NSDateComponents *components = [cal components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now]; 

[components setHour:9]; 
[components setMinute:0]; 
[components setSecond:0]; 
NSDate *nineHundred = [cal dateFromComponents:components]; 

[components setHour:18]; 
NSDate *eighteenHundred = [cal dateFromComponents:components]; 

if ([nineHundred compare:now] != NSOrderedDescending && 
    [eighteenHundred compare:now] != NSOrderedAscending) 
{ 
    NSLog(@"Date is between 09:00 and 18:00"); 
} 
+0

Merhaba millet, yollarınız için teşekkürler, ne demek istediğini anlıyorum, ama dokuz Yüz ve onsekiz Yüz sıfır, sanırım ben hata düzeltebilirsiniz, sizin yönteminiz için teşekkür ederiz – Relex

+0

@Relex Ve düzeltme gerekli nedir? Lütfen cevabımı güncelleyin, çünkü karşılaştırma için gerekli tarihleri ​​oluşturmanın en iyi yolu budur. – trojanfoe

+0

Teşekkür ederiz! Bu karşılaştırma yapmak için 'NSCalendar' kullanmanın tek cevabı. Hala umut var. Bununla birlikte, karşılaştırma için iki tarihin yapılması gerekli değildir. Bileşenin 'hour' özelliği doğrudan 9 ile 18 arasında olup olmadığını kontrol edebilirsiniz. Ayrıca, hafta, hafta içi, saat dilimi takvim birimleri gerekli değildir. –

İlgili konular