C++11 印出現在時間 使用 chrono 2

前章做了一堆事想要把 now_as_string 抽離出來,變得更 Generic, 好用, C++風格,還為了能跟 std::put_time 一樣,做出一個能與 std::ostream 重載的 operator<< ,所以定義了 now_as_obj 之累的實作型別。到頭來才發現我其實只是在做一個,帶有現在時間 std::tmstd::put_time wrapper 罷了。

為了不要重作無謂的 wrapper,應該抽離做我所缺的東西。我想要的是 將現在時間以字串表示 的服務。

[Func2] =  [Func1] => tm(now) => [put_time] => ostream => [sstream::str()] => string
Func1
std::tm now_tm()
{
  auto now = std::chrono::system_clock::now();                  // as chrono time_point
  auto now_time_t = std::chrono::system_clock::to_time_t(now);  // as UNIX-timestamp integer
  std::tm now_tm_ = {};                                          // as struct with date and time
  localtime_s(&now_tm_, &now_time_t);                            // use thread-safe localtime
  return now_tm_;
}
Func2
template<typename CharT>
std::basic_string<CharT> now_string(const CharT* fmt)
{
  std::basic_ostringstream<CharT> ss; 
  ss << std::put_time(&now_tm(), fmt);
  return ss.str();
}
Usage
std::cout << std::put_time(&now_tm(), "%F %T") << std::endl;
std::wstring str = now_string(L"%F %T");
comments powered by Disqus