c++ - C++:使用后缀设置时间
问题描述
告诉我,C++ 11/14/17 中是否存在以下内容:
1) 使用时间后缀设置时间
double time1 = 1s; // time1 = 1.0
double time2 = 2m; // time2 = 120.0
double time3 = 7ms; // time3 = 0.007
2) 获取设置为后缀的时间的字符串值
std::cout << getTime(time1); // cout 1s
std::cout << getTime(time2); // cout 2s
std::cout << getTime(time3); // cout 7ms
解决方案
所有现代 C++ 时间实用程序都在库参考中进行了描述<chrono>
是的,从c++14开始,我们有
std::literals::chrono_literals
,允许我们使用以下文字:operator""h operator""min operator""s operator""ms operator""us operator""ns
例如(来自 cppreference):
#include <iostream> #include <chrono> int main() { using namespace std::chrono_literals; auto day = 24h; auto halfhour = 0.5h; std::cout << "one day is " << day.count() << " hours\n" << "half an hour is " << halfhour.count() << " hours\n"; }
不是直接的,而是从c++11开始,有
std::chrono::duration
几个方便的辅助类型来帮助正确描述时间(例如std::chrono::millisceonds
,std::chrono::hours
等)。使用这些,您可以轻松地完成所需的工作。来自cppreference的缩短示例 。如您所见,单位必须单独打印,但通过一些模板魔法选择正确的打印单位就很容易了。
#include <iostream> #include <chrono> int main() { std::chrono::seconds sec(1); std::cout << sec.count() <<" second is equal to:\n"; // integer scale conversion with no precision loss: no cast std::cout << std::chrono::microseconds(sec).count() << " microseconds\n"; // integer scale conversion with precision loss: requires a cast std::cout << std::chrono::duration_cast<std::chrono::minutes>(sec).count() << " minutes\n"; }
推荐阅读
- javascript - 覆盖 Prettier 配置
- cpu - 增加百分比后如何计算处理器的 CPI?
- c# - 如何通过此 .txt 文件正确解析(每 3 行重复一次)
- r - 使用 ggplot2 对多面堆叠条形图进行排序
- python - 声明不会打印
- json - Dart - 如何 _InternalLinkedHashMap
转换为地图 ? - angular - 角度时间戳格式 201909081015
- visual-studio-code - 使用 VS Code 将 Blazor 服务器端应用程序部署到 Azure
- javascript - 如何在滚动时修复弹跳部分/内容?
- c# - 在 UWP 中将音频文件转换为 8000Hz 16Bit Mono Wav