Jon*_*rio 2 c++ time std stream
我对 C++ 还很陌生。我需要获取当前年份并将其存储在 int 中。
我已经找到了这个解决方案:
std::time_t result = std::time(nullptr);
std::istringstream iss(ctime(&result));
iss.ignore(20);
int year;
iss >> year;
Run Code Online (Sandbox Code Playgroud)
我发现这个解决方案有点难看,即使它有效,因为它看起来不太健壮,而且需要很多步骤才能完成很多工作。
有更好的方法吗?
yum*_*odo 11
C++20,你可以用于std::chrono这样的目的。
#include <iostream>
#include <format>
#include <chrono>
int main()
{
const auto now = std::chrono::system_clock::now();
std::cout << std::format("{:%Y}", now); // => 2021
}
Run Code Online (Sandbox Code Playgroud)
在我看来,随后使用字符串解析将其转换time_t为字符串似乎不必要的复杂且容易出错。正如@Ted 的评论中已经抱怨的那样,这可能会引入文本输出的本地化,这可能会使解析不稳健。
与 一起std::time(),有可用的
std::localtime()
将自纪元以来的给定时间作为 std::time_t 值转换为以本地时间表示的日历时间。
std::gmtime()
将自纪元以来的给定时间作为 std::time_t 值转换为日历时间,以协调世界时 (UTC) 表示。
两者都返回一个指向 a 的指针struct tm,其中包含公共成员
int tm_year自 1900 年以来
一个小样本:
#include <ctime>
#include <iostream>
int main()
{
std::time_t t = std::time(nullptr);
std::tm *const pTInfo = std::localtime(&t);
std::cout << "Current year: " << 1900 + pTInfo->tm_year << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
Current year: 2019
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14974 次 |
| 最近记录: |