You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过std::chrono::gps_clock::now计算GPS周内时间(gps_tow)

如何用std::chrono::gps_clock::now计算GPS周内时间(gps_tow)

GPS周内时间(gps_tow)指当前GPS时间距离每周日零时的时长,一周固定为604800秒(7×24×3600)。仅用std::chrono库可按以下步骤计算:

  • 获取当前GPS时间点:通过std::chrono::gps_clock::now()获取std::chrono::gps_time类型的当前时间点,该时间点以GPS纪元(1980年1月6日00:00:00 GPS时间)为基准。
  • 转换为总时长:将时间点转换为自GPS纪元以来的总时长,可根据需求选择精度(秒、毫秒等)。
  • 取余计算周内时间:用总时长对一周的时长取余,结果即为gps_tow。

代码示例(秒级精度)

#include <chrono>
#include <iostream>

int main() {
    // 获取当前GPS时间点
    const auto now = std::chrono::gps_clock::now();
    // 转换为GPS纪元以来的总秒数
    const auto total_sec = std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch());
    // 定义GPS一周的秒数
    constexpr std::chrono::seconds gps_week_sec{604800};
    // 计算周内时间
    const auto gps_tow = total_sec % gps_week_sec;
    
    std::cout << "GPS周内时间(秒):" << gps_tow.count() << '\n';
    return 0;
}

高精度扩展(以毫秒为例)

如果需要毫秒级的gps_tow,只需调整精度类型:

#include <chrono>
#include <iostream>

int main() {
    const auto now = std::chrono::gps_clock::now();
    const auto total_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch());
    constexpr std::chrono::milliseconds gps_week_ms{604800 * 1000};
    const auto gps_tow_ms = total_ms % gps_week_ms;
    
    std::cout << "GPS周内时间(毫秒):" << gps_tow_ms.count() << '\n';
    return 0;
}

注意:std::chrono::gps_clock需要C++20及以上版本的编译器/标准库支持,确保你的编译环境满足要求。

内容的提问来源于stack exchange,提问作者fghoussen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:28:23