我已經看過相關的問題與答案,他們的解決方案沒有奏效。我真的很困惑我從NSDateComponents和NSDateFormatter(和MTDates易於使用,但我試圖繞過,得到不同的結果無濟於事)的輸出。NSDateComponents(通過MTDates)返回一個奇怪的數字小時(mt_hourOfDay)
這裏是UI的相關部分的鏈接(來自模擬器):與問題相關的http://grab.by/rFbQ
和日誌功能:
2013-10-31 23:58:03.407 Application[22530:70b] Date 2013-11-01 04:58:03 +0000
2013-10-31 23:58:03.408 Application[22530:70b] Formatted Date Oct 31, 2013, 11:58:03 PM
2013-10-31 23:58:03.408 Application[22530:70b] Hours 17
2013-10-31 23:58:03.408 Application[22530:70b] Minutes 9
代碼用於獲取的數字:
[NSDate mt_setTimeZone:[NSTimeZone localTimeZone]];
NSDate *current = [NSDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
[formatter setTimeZone:[NSTimeZone localTimeZone]];
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setTimeZone:[NSTimeZone localTimeZone]];
NSDateComponents *comp = [cal components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:current];
NSUInteger hours = comp.hour;
NSUInteger minutes = ceil([current mt_minuteOfHour]/6);
NSLog(@"Date %@", current);
NSLog(@"Formatted Date %@", [formatter stringFromDate:current]);
NSLog(@"Hours %lx", hours);
NSLog(@"Minutes %lx", minutes);
self.dateLabel.text = [formatter stringFromDate:current];
self.timeLabel.text = [NSString stringWithFormat:@"%lx.%lx", hours, minutes];
我不知道你是否可以從上面的輸出中得知,但格式化的日期(對於正確的時區)將小時顯示爲「11」(「11:58:03」),這讓我感到困惑,e ven將NSCalendar
和NSDateFormatter
的時區設置爲相同的NSTimeZone
(localTimeZone
)我得到「17」作爲當前小時。
我還應該提一下,我使用MTDates來增加日期操作,但在包含此庫之前遇到此問題(希望它的包含可能以某種方式使這些結果更加理智)。也就是說,我也嘗試更換我取自己的零件的部分:
NSUInteger hours = [current mt_hourOfDay];
不幸的是,這也返回「17」。我希望它會返回「23」,但會對「11」感到滿意,然後可能會將其轉換爲24比例。
'%x'格式說明符用於十六進制。使用'%d'作爲十進制(Base 10)。 23十進制是17十六進制。 – rmaddy
@maddy哇...我現在覺得自己像個白癡麼?我對格式化組件的不熟悉以及文檔中缺少規範(文檔中的'NSUInteger%lu或%lx')導致我盲目。這個想法從來沒有發生過。如果你不介意在回答中寫出這些(我意識到這並不多),我會給你接受。這是我的問題的解決方案。 –
有時候是小事。 :)看到我的答案。 – rmaddy