簡體   English   中英

使用 %d%m%y 格式創建 am std::time_t 時,迄今為止的字符串在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM