C - 将time_t转换为格式为YYYY-MM-DD HH:MM:SS的字符串

dme*_*ssf 40 c

有没有办法在保持代码可移植的同时自动将格式为YYYY-MM-DD HH:MM:SS转换time_t为a ?std::string

Jer*_*fin 67

用于localtime将转换time_t为a struct tm.您可以使用它strftime来打印所需的数据.

char buff[20];
time_t now = time(NULL);
strftime(buff, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
Run Code Online (Sandbox Code Playgroud)

  • +1好的答案.但是,如果您的代码曾在可重入的环境中使用,请使用localtime_r(). (3认同)
  • @Amardeep:他特别要求可移植性,而“localtime_r”可能不符合这方面的条件(取决于他关心的目标)。 (2认同)
  • localtime_r此时已成为POSIX的一部分已有18年.我认为假设它可用是安全的. (2认同)

jer*_*jer 0

我想到的唯一真正的选择是编写自己的例程,或者使用 POSIX.1/C90 中定义的 ctime() 函数。ctime() 当然值得研究,但如果您的日期不在正确的时区,您将遇到问题。

编辑:我没有考虑使用下面杰瑞提到的当地时间。将其转换为 struct tm 确实为您提供了更多可能性,包括他提到的内容和 strptime()。

  • 不,提到了 strftime,但没有提到 strptime,它们是两个独立(但相似)的函数。但是,虽然 strftime 是 C90 的一部分,但 strptime 不是,因此如果您的目标平台上不存在它,请忽略该部分。 (2认同)