iphone - NSDateComponents 返回奇怪的时间

标签 iphone objective-c

我正在编写一些代码来获取服务器上的图像。图像文件名采用 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 - NSDateComponents 返回奇怪的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129905/

相关文章:

iphone - 从 xib 中提取 UI 项目?

适用于所有屏幕和方向的 iOS

c++ - 将 C++ 与 Objective-C 结合使用,如何修复 "Conflicting declaration ' typedef int BOOL'"?

ios - 角标(Badge)在右栏按钮项目上的稳定位置

iphone - UIViewController 不知道显示模态视图的旋转

ios - 当导航栏的颜色在不同的 View Controller 之间发生变化时,如何更改后退按钮的颜色?

ios - 我需要一种方法来检索和记录通过 USB 连接的 iPhone 设备的 IMEI、序列号、ICCID 和 MEID

ios - UITableView 没有更新

iphone - iOS 中的弱链接符号测试无法按预期工作

iphone - RaptureXML 无法从用户路径加载数据