以c / c ++创建时间戳的可移植方式

时间:2010-08-17 17:49:11

标签: c++ c

我需要以这种格式生成时间戳yyyymmdd。基本上我想创建一个具有当前日期扩展名的文件名。 (例如:log.20100817)

3 个答案:

答案 0 :(得分:18)

strftime

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  char date[9];
  time_t t = time(0);
  struct tm *tm;

  tm = gmtime(&t);
  strftime(date, sizeof(date), "%Y%m%d", tm);
  printf("log.%s\n", date);
  return EXIT_SUCCESS;
}

答案 1 :(得分:1)

另一种选择:Boost.Date_Time

答案 2 :(得分:0)

C ++ 11答案:

std::time_t t = std::time(nullptr);
std::tm tm = *std::localtime(&t);
std::ostringstream oss;
oss << std::put_time( &tm, "%Y-%m-%d" );
std::string timestamp( oss.str() );

需要标头chrono(还有sstreamiomanip,而put_time需要标头)。

所有格式代码均在std::put_time页上进行了详细说明。 例如,要添加小时和分钟,您可以执行以下操作:

oss << std::put_time(&tm, "%Y-%m-%d_%H:%M");

您也可以使用auto

auto t = std::time(nullptr);
auto tm = *std::localtime(&t);
std::ostringstream oss;
oss << std::put_time( &tm, "%Y-%m-%d" );
std::string timestamp( oss.str() );