STTNet 0.7.0

Demo:时间与 Duration

完整展示本地时间文本、Duration 返回类型、时间差和单调计时。

1. 示例内容

示例中的关键调用使用中文注释,并与仓库源码、CMake 目标和当前 API 保持一致。

2. 构建与运行

cmake --build build --target sttnet_time_tools --parallel
./build/examples/sttnet_time_tools

3. 运行结果

./build/examples/sttnet_time_tools
预期:输出当前本地时间、90 秒间隔、90.25 秒时间差、两次计时结果和规范化后的 Duration。

4. 完整源码

#include <sttnet.h>

#include <chrono>
#include <iostream>
#include <thread>

int main()
{
    using stt::time::DateTime;
    using stt::time::Duration;

    // DateTime::getTime() 把当前本地时间写入字符串。
    // 它不返回 Unix 时间戳,也不返回 Duration。
    std::string now;
    DateTime::getTime(now, ISO8086B);
    std::cout << "now: " << now << '\n';

    // convertFormat() 按声明的旧格式重排时间文本。
    // 它会原地修改字符串;文本与格式不匹配时返回 false。
    std::string display=now;
    if(DateTime::convertFormat(display,ISO8086B,"yyyy/mm/dd hh:mi:ss.sss"))
        std::cout << "display: " << display << '\n';

    // Duration 是 STTNet 的时间间隔类型。构造参数顺序为:
    // 天、小时、分钟、秒、毫秒。
    const Duration retryDelay(0,0,1,30,0);
    std::cout << "retry delay: " << retryDelay.convertToMsec() << " ms\n";

    // calculateTime(time1,time2,...) 同样通过 Duration 返回时间差。
    Duration difference;
    DateTime::calculateTime("2026-07-15T12:01:30.250",
                            "2026-07-15T12:00:00.000",
                            difference,ISO8086B,ISO8086B);
    if(difference.isValid())
        std::cout << "difference: " << difference.convertToMsec() << " ms\n";

    // startTiming()、checkTime() 和 endTiming() 使用单调时钟。两个读取
    // 接口都返回 stt::time::Duration,不返回整数。
    DateTime timer;
    if(!timer.startTiming())
        return 1;
    std::this_thread::sleep_for(std::chrono::milliseconds(60));
    const Duration current=timer.checkTime(); // 读取当前耗时,但不停止计时。
    std::this_thread::sleep_for(std::chrono::milliseconds(60));
    const Duration total=timer.endTiming();   // 停止计时并保存最后一次间隔。

    if(!current.isValid()||!total.isValid())
        return 2;
    std::cout << "current: " << current.convertToMsec() << " ms\n";
    std::cout << "total: " << total.convertToMsec() << " ms\n";
    std::cout << "saved: " << timer.getDt().convertToMsec() << " ms\n";

    // recoverForm() 会修改当前 Duration 对象。
    Duration normalized;
    normalized.recoverForm(90061001);
    std::cout << "normalized: " << normalized.day << "d "
              << normalized.hour << "h " << normalized.min << "m "
              << normalized.sec << "s " << normalized.msec << "ms\n";
    return 0;
}