当前日期和时间作为字符串

新手上路,请多包涵

我编写了一个函数来获取当前日期和时间,格式为: DD-MM-YYYY HH:MM:SS 。它有效,但可以说,它非常丑陋。我怎样才能做 完全相同但更简单的事情

 string currentDateToString()
{
    time_t now = time(0);
    tm *ltm = localtime(&now);

    string dateString = "", tmp = "";
    tmp = numToString(ltm->tm_mday);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += "-";
    tmp = numToString(1 + ltm->tm_mon);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += "-";
    tmp = numToString(1900 + ltm->tm_year);
    dateString += tmp;
    dateString += " ";
    tmp = numToString(ltm->tm_hour);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += ":";
    tmp = numToString(1 + ltm->tm_min);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;
    dateString += ":";
    tmp = numToString(1 + ltm->tm_sec);
    if (tmp.length() == 1)
        tmp.insert(0, "0");
    dateString += tmp;

    return dateString;
}

原文由 Katie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 465
2 个回答

非 C++11 解决方案:使用 <ctime> 标头,您可以使用 strftime 。确保您的缓冲区足够大,您不会希望超出它并在以后造成严重破坏。

 #include <iostream>
#include <ctime>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer[80];

  time (&rawtime);
  timeinfo = localtime(&rawtime);

  strftime(buffer,sizeof(buffer),"%d-%m-%Y %H:%M:%S",timeinfo);
  std::string str(buffer);

  std::cout << str;

  return 0;
}

原文由 max 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 C++20,时间点格式(到字符串)在 (chrono) 标准库中可用。 https://en.cppreference.com/w/cpp/chrono/system_clock/formatter

 #include <chrono>
#include <format>
#include <iostream>

int main()
{
   const auto now = std::chrono::system_clock::now();
   std::cout << std::format("{:%d-%m-%Y %H:%M:%OS}", now) << '\n';
}

输出

13-12-2021 09:24:44

它适用于具有最新 C++ 语言版本 (/std:c++latest) 的 Visual Studio 2019 (v16.11.5)。

原文由 Synck 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题