![](/img/trans.png)
[英]How to convert a "%Y%m%d" format string into a time_t variable in C++?
[英]String to date not working in C++ when using the %d%m%y format to create am std::time_t
我正在嘗試從字符串中獲取日期,這是一個以前被問過一千次的問題,但由於某種原因,即使當我遵循它們時所有示例都是相同的,它也不起作用。
這是我的代碼:
struct std::tm tm;
std::istringstream stringStream("191121");
stringStream >> std::get_time(&tm, "%d%m%y");
std::time_t time = mktime(&tm);
我想我使用了正確的格式,我在這里找到了: https://www.boost.org/doc/libs/1_77_0/doc/html/date_time/date_time_io.html#date_time.format_flags
盡管它來自 boost,但據我所知,這些標志是非常標准的。
每當我運行這段代碼時,變量time
總是-1。
std::get_time
只能填充字符串中存在的tm
字段(未指定實現是否將未使用的字段設置為零)。
由於tm
未初始化,這可能會導致無效時間,從而導致mktime
失敗。 在代碼開頭初始化tm
可以解決問題。 在使用結果之前檢查 stream 操作是否成功也是一個好主意。
std::tm tm{};
std::istringstream stringStream("191121");
stringStream >> std::get_time(&tm, "%d%m%y");
if (!stringStream) {
throw std::invalid_argument("invalid date string");
}
std::time_t time = mktime(&tm);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.