2012-10-01 15 views
19

Bir tarihin doğası gereği olup olmadığını nasıl kontrol edebilirim TOMORROW?Amaç C - ertesi gün bu güne ait (yarın)

Bugün gibi bir tarihe saat ya da herhangi bir şey eklemek istemiyorum, çünkü bugün zaten 22:59 ise, çok fazla ekleme, sonraki güne geçecek ve zamanın 12:00 olması durumunda çok az ekleyecek .

İki NSDate s'yi nasıl kontrol edebilirim ve birinin diğeri için yarının eşdeğeri olduğundan emin olabilirsiniz?

+1

olası yinelenen: // stackoverflow.com/questions/1081689/how-can-i-get-next-date-using-nsdate) – raina77ow

cevap

49

NSDateComponents'u kullanarak, gün/ay/yıl bileşenlerini bugün temsil eden tarihten itibaren ay/gün/saniye bileşenlerini göz ardı ederek ayıklayabilirsiniz, bir gün ekleyin ve yarına karşılık gelen bir tarihi yeniden oluşturun.

Şu anki tarihe tam olarak bir gün eklemek istediğinizi düşünün (saat/dakika/saniye bilgisini "şimdi" tarihiyle aynı tutmak dahil), 24 * 60 * 60 saniyeden bir timeInterval ekleyebilirsiniz " bunun yerine,

NSDateComponents* deltaComps = [[[NSDateComponents alloc] init] autorelease]; 
[deltaComps setDay:1]; 
NSDate* tomorrow = [[NSCalendar currentCalendar] dateByAddingComponents:deltaComps toDate:[NSDate date] options:0]; 

ama gece yarısı de yarın göre tarih oluşturmak istiyorsanız olabilir: Şimdi" NSDateComponents kullanarak bu şekilde yapmak için dateWithTimeIntervalSinceNow kullanarak, ama daha iyi (ve DST geçirmez vb) 'dir şimdi temsil eden tarihin ay/gün/yıl bileşenleri, saat/dakika/saniye bölüm olmadan ve 1 gün ekleyin, sonra bir tarih yeniden: Sen Date and Time Programming Guide tarih kavramları hakkında gerçekten yararlı tavsiyeler ve malzeme okuyabilir .:

// Decompose the date corresponding to "now" into Year+Month+Day components 
NSUInteger units = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; 
NSDateComponents *comps = [[NSCalendar currentCalendar] components:units fromDate:[NSDate date]]; 
// Add one day 
comps.day = comps.day + 1; // no worries: even if it is the end of the month it will wrap to the next month, see doc 
// Recompose a new date, without any time information (so this will be at midnight) 
NSDate *tomorrowMidnight = [[NSCalendar currentCalendar] dateFromComponents:comps]; 

P.S., özellikle here about date components.

+0

Çok ama çok iyi cevap! –

+0

'NSCalendar'un 'dateFromComponents''nın' nullable 'sonucunu döndürdüğü gerçeğini nasıl değerlendiriyorsunuz? Yarın her zaman var olduğunu biliyorum ve bunu kodlarken de kullanmak istiyorum. Ancak, bu yaklaşımı Swift 'yarınMidnight '_may_' nil'de kullandığımda, en azından derleyicinin düşündüğü şey budur. – i4niac

6

iOS 8'de, isDateInTomorrow adı verilen NSCalendar üzerinde bir kolaylık yöntemi vardır.

Objective-C

NSDate *date; 
BOOL isTomorrow = [[NSCalendar currentCalendar] isDateInTomorrow:date]; 

[Nasıl NSDate kullanarak bir sonraki tarih alabilirim?] Arasında (http Swift 3

let date: Date 
let isTomorrow = Calendar.current.isDateInTomorrow(date) 

Swift 2

let date: NSDate 
let isTomorrow = NSCalendar.currentCalendar().isDateInTomorrow(date)