2011-05-07 28 views
5

kullanarak ayın 1. günü alınıyor:Ben kod pasajı aşağıdaki yürütmek NSCalendar

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

NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp]; 

firstDayOfMonthDate Değeri olan = 30-4-2011 ama 2011/01/05 yani ben ayın ilk randevu ister excpeted olduğunu herhangi bir tarihte Ama bana önceki ayın son tarihini veriyor.

şimdiden teşekkürler.

+4

Muhtemelen bir saat dilimi hatası – JustSid

+0

[NSDate date] değeri nedir? – Radu

+0

Aynı zamanda timeZone bir şey olduğunu düşünüyorum.Ama ayrıca 2 farklı zaman dilimi değerlerini ayarlayarak çalıştı: 1. timeZoneWithAbbreviation: EST çalışır ancak uygulama ABD'de çalıştırılırsa, prohemm verir. Hindistan'da kod geliştirme (Asia) 2. systemTimeZone: 30-4-2011 tarihlerini verir. –

cevap

10

sizin NSCalendar başlatılıyor sonra

[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

ekleyin.

[NSDate date], UTC saat diliminde bir tarihi döndürecek, 1 Ocak 2001 00:00 GMT'den bu yana mutlak bir aralık olacak, ancak NSCalendar öğesinin saati UTC olmayabilecek varsayılan saat dilimi olarak ayarlandıZone. Bir saniyenin kesirler önemli değildir gündelik kullanımda

, Greenwich Ortalama Saati (GMT) eşdeğer ele alınabilir:

UTC UTC, wikipedia dan bir alıntı olarak "aynı" olduğunu UTC veya UT1'e. "GMT" derken genellikle kayıt dışı veya geçici bağlamlarında kullanıldığında UTC veya UT1 anlamına gelir. Teknik bağlamda, "GMT" nin kullanımından kaçınılır; Belirsiz terminolojisi "UTC" veya "UT1", tercih edilir. [3]

+1

teşekkürler. Çalıştı.Ama iki nokta bulamıyorum 1. Neden [gregorian setTimeZone: [NSTimeZone systemTimeZone]]; 2. Uygulamada NSDate & NSCalendar kullanılırken hangi noktaların göz önünde bulundurulması gerekir ki, bu tür problemler tekrar karşılaşmaz. –

İlgili konular