【发布时间】:2010-01-25 11:34:07
【问题描述】:
我正在编写一些代码来获取服务器上的图像。图像文件名采用 yyyyMMdd_HHmm 格式(UTC),每 3 小时生成一次(1200,1500,1800,..等)。当代码开始时,我得到当前的 UTC 日期并提取时间。然后我从中创建一个 NSDateComponent,并查看当前时间,将 NSDateComponent 的小时设置为下一张图像的小时。很奇怪,如果我将小时设置为 3,我从 NSCalendar dateFromComponents 返回的 NSDate 有一个 不同的小时...什么给出? (我也在控制台输出中添加了)。
// 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);
从 NSLogs 产生的控制台输出是这样的。我得到一个 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
(我知道有一些内存释放问题,但我想先让它发挥作用..)
【问题讨论】:
标签: iphone objective-c