如何使用ctime更改时间戳的格式?

flseospp  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(155)

我是C语言的新手,正在尝试如何从系统时间生成时间戳,并使用该时间戳命名文件。到目前为止,我已经成功了:

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

int main(void)
{
    time_t rawtime;  
    time(&rawtime);

    printf("%s",ctime(&rawtime));
    
    return 0;
}

并且输出是正确的。

Wed Apr 12 14:51:03 2023

现在,我的问题是,如何将时间戳的格式更改为对文件名更友好的格式,例如

MM_DD_YY_HH_M_S
mepcadol

mepcadol1#

如何使用ctime更改时间戳的格式?
标准库函数ctime()不提供格式更改。
使用gmtime()(或localtime())和strftime()

struct tm *tm = localtime(&rawtime);
if (tm) {
  #define TIME_STRING_SIZE 100
  // MM_DD_YY_HH_MM_SS
  #define TM_FMT "%m_%d_%y_%H_%M_%S"
  char time_string[TIME_STRING_SIZE];
  size_t size = strftime(time_string, sizeof time_string, TM_FMT, tm);
  if (size > 0) {
    printf("%s\n", time_string);
  }
}

使用本地时间的风险是,在25小时制的一天中,本地时区从夏令时变为标准时间,在2个不同的时间生成相同的MM_DD_YY_HH_MM_SS。
我建议使用通用时间,而不是本地时间,并遵循ISO8601:年月日

struct tm *tm = gmtime(&rawtime);
if (tm) {
  #define TIME_STRING_SIZE 100
  // YYYY_MM_DD_HH_MM_SS
  #define TM_FMT "%Y_%m_%d_%H_%M_%S"
  char time_string[TIME_STRING_SIZE];
  size_t size = strftime(time_string, sizeof time_string, TM_FMT, tm);
  if (size > 0) {
    printf("%s\n", time_string);
  }
}

相关问题