我在寫一些代碼來獲取服務器上的圖像。圖像文件名採用yyyyMMdd_HHmm格式(採用UTC),每3小時生成一次(1200,1500,1800等..)。當代碼開始時,我得到當前UTC日期並提取時間。然後我從中創建一個NSDateComponent,並查看當前時間,將NSDateComponent的小時設置爲下一個圖像的小時。很奇怪的是,如果我的時間設置爲3,NSDate的我從NSCalendar dateFromComponents背面擁有一顆不同小時 ...怎麼辦? (我也在控制檯輸出中添加了)。NSDateComponents返回奇怪的小時
// get current time in UTC
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *UTC = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeZone:UTC];
// get the current hour & min
[dateFormatter setDateFormat:@"HHmm"];
NSDate *today = [NSDate date];
NSString *str = [dateFormatter stringFromDate:today];
NSInteger hour = [str integerValue];
NSLog(str);
// find next image hour
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit;
NSDateComponents *currentImageDateComps = [cal components:unitFlags fromDate:today];
if (hour > 2100) {
[currentImageDateComps setHour:0];
// add an extra day as next image is start of new day
[currentImageDateComps setDay:[currentImageDateComps day]+1];
} else if (hour < 300) {
[currentImageDateComps setHour:3];
} else if (hour < 600) {
[currentImageDateComps setHour:6];
} else if (hour < 900) {
[currentImageDateComps setHour:9];
} else if (hour < 1200) {
[currentImageDateComps setHour:12];
} else if (hour < 1500) {
[currentImageDateComps setHour:15];
} else if (hour < 1800) {
[currentImageDateComps setHour:18];
} else if (hour < 2100) {
[currentImageDateComps setHour:21];
}
[currentImageDateComps setMinute:0];
NSLog(@"hour %d", [currentImageDateComps hour]);
NSLog(@"minute %d", [currentImageDateComps minute]);
// construct the date
NSDate *currentImageDate = [cal dateFromComponents:currentImageDateComps];
[dateFormatter setDateFormat:@"yyyyMMdd_hhmm"];
NSString *nextImage = [dateFormatter stringFromDate:currentImageDate];
self.currentFilename = [nextImage stringByAppendingString:@".png"];
NSLog(self.currentFilename);
從NSLog生成的控制檯輸出是這樣的。我得到的值爲3小時,但它返回爲'1700'?
2010-01-25 12:25:02.049預測[8447:207] viewDidLoad中
2010-01-25 12:25:02.052預測[8447:207] 0225
2010-01- 25 12:25:02.052預測[8447:207]每小時3
2010-01-25 12:25:02.053預測[8447:207]分鐘0
2010-01-25 12:25:02.053預測[8447:207] 20100124_1700.png
(I 「M意識到有一些內存釋放問題,但我想它的功能第一..)
是的,看來這是問題我猜,當你創建一個NSCalendar它使用你的。 。默認的時區我NSDateFormatter了時區設置爲UTC但是從NSCalendar得到的NSDateComponents沒了,所以區別我已經 補充道:創建NSCalendar對象之後[CAL setTimeZone UTC]和我所有的日期/時間,現在是什麼我會期待。 – timbo 2010-01-25 05:44:24