在我的核心数据库中,当我从服务器更新信息时,我捕获当前时间并将其保存在核心数据库字段中。我知道服务器会在整点更新信息,所以我想将对服务器的请求速率限制为每小时一次,同时还从服务器获取最新数据。
例如,假设服务器更新其数据的时间。
在我的应用程序上,我可以随时刷新。假设我在早上 7:55 抓取了数据。虽然我想将应用程序的更新请求频率限制为每小时一次,但我也希望尽快获得最新数据。因此,我不想存储 7:55 的时间戳,而是想存储上午 7:00,这样如果我在 10 分钟后刷新,我至少会获得下一次更新。
NSDate *oldDate = [NSDate date];
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSCalendar *calendar = [NSCalendar currentCalendar];
//calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSDateComponents *comps = [calendar components:unitFlags fromDate:oldDate];
comps.minute = 00;
comps.second = 00;
NSDate *newDate = [calendar dateFromComponents:comps];
return newDate;
上面的代码不起作用,因为一旦我调用 NSCalendar,就会涉及到时区。有没有办法在不涉及 NSCalendar 的情况下做到这一点?
最佳答案
将日期/时间截断为整点必然需要指定时间 区。例如,Indian Standard Time是 GMT+05.30,所以“7.55am GMT”与“1.25pm IST”相同。
如果服务器在每个完整的 GMT 小时更新其数据,则下一次更新将在“GMT 上午 8 点”。但是,如果服务器位于印度并在每个完整的 IST 小时更新其数据,则下一次更新将是“2.00pm IST”,即“7.30am GMT”。
因此,要计算“整点”,您必须知道服务器使用的时区。如果 服务器更新在每个完整的 GMT 小时完成,然后添加
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
会是正确的事情。
顺便说一句,计算当前小时开始时间的一种稍微更短的方法是
使用 NSCalendar
的 rangeOfUnit:...
方法:
NSDate *oldDate = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSDate *newDate;
[calendar rangeOfUnit:NSHourCalendarUnit startDate:&newDate interval:NULL forDate:oldDate];
return newDate;
关于ios - 捕获当前时间但将分钟重置为零而不处理时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256209/