Demo:时间与 Duration
完整展示本地时间文本、Duration 返回类型、时间差和单调计时。
1. 示例内容
示例中的关键调用使用中文注释,并与仓库源码、CMake 目标和当前 API 保持一致。
2. 构建与运行
cmake --build build --target sttnet_time_tools --parallel
./build/examples/sttnet_time_tools3. 运行结果
./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;
}