我有一个时间戳(自纪元以来的纳秒):
uint64_t ts = .....;
我想检查它是否比当前系统时间早5秒。
所以我需要将时间戳转换为time_point
?然后从当前时间(以纳秒为单位)减去它,检查其值是否大于chrono::duration::seconds(5)
?
到目前为止:
const std::chrono::time_point tstp(std::chrono::duration_cast<std::chrono::nanoseconds>(rawNanos));
const std::chrono::time_point now = std::chrono::high_resolution_clock::now();
const bool old = now - tstp > std::chrono::seconds(5);
但由于time_point的构造函数类型而苦苦挣扎。
答案 0 :(得分:4)
您不应该使用@implementation KSTAddressServiceImplementation
- (void)loadAddressForLatitude:(double)latitude
longitude:(double)longitude
completion:(void (^)(KSTAddress * _Nullable address, NSError * _Nullable error))completion {
[[GMSGeocoder geocoder] reverseGeocodeCoordinate:CLLocationCoordinate2DMake(latitude, longitude)
completionHandler:^(GMSReverseGeocodeResponse * _Nullable response, NSError * _Nullable error) {
if (completion) {
KSTAddress *address;
if (response.firstResult) {
address = [[KSTAddress alloc] initWithAddress:response.firstResult];
}
completion(address, error);
}
}];
}
@end
。在某些平台上high_resolution_clock
计算自计算机启动以来的时间,而不是Unix时代以来的时间。
虽然标准没有规定,但事实上的标准是,在所有平台上,high_resolution_clock
计算自Unix时代以来的时间。
我发现首先根据system_clock
声明一个基于time_point
的模板化类型别名,模板化system_clock
。这样可以轻松创建自Unix时代以来计算时间的任何精度的duration
:
time_point
鉴于:
template <class D>
using sys_time = std::chrono::time_point<std::chrono::system_clock, D>;
在C ++ 14中,您将能够编写:
uint64_t ts = 1235;
using namespace std::chrono;
const bool old = system_clock::now() >
sys_time<nanoseconds>{nanoseconds{ts}} + seconds{5};