【问题标题】:C convert char[] to timestamp;C 将 char[] 转换为时间戳;
【发布时间】:2011-08-10 21:23:34
【问题描述】:

我有 char date[] = "2011-04-01";它如何转换为 C 或 C++ 中的时间戳?

【问题讨论】:

  • 也许这个答案会有所帮助:stackoverflow.com/questions/1002542/…
  • 您的标题是 C,您的问题是 C 或 C++,而您只标记了 C++。你是用 C 编程,还是用 C++ 编程?

标签: c++ timestamp char


【解决方案1】:

警告:strptime 是一个POSIX 函数(在操作系统“Windows”平台上可能无法通过 time.h 获得)。

#include <time.h>

struct tm time;
strptime("2011-04-01", "%Y-%m-%d", &time);
time_t loctime = mktime(&time);  // timestamp in current timezone
time_t gmttime = timegm(&time);  // timestamp in GMT

【讨论】:

  • 未完全初始化/分配time 可能是一个问题:“未指定...将更新结构的当前内容或覆盖结构的所有内容”。建议struct tm time = {0}; 并使用time-&gt;isdst == -1;
  • 哪里需要使用:"time->isdst == -1;" ?
【解决方案2】:

试试这个:

char date[] = "2011-04-01";
date[4] = date[7] = '\0';
struct tm tmdate = {0};
tmdate.tm_year = atoi(&date[0]) - 1900;
tmdate.tm_mon = atoi(&date[5]) - 1;
tmdate.tm_mday = atoi(&date[8]);
time_t t = mktime( &tmdate );

【讨论】:

  • 请注意,此解决方案假定 "2011-04-01"本地 日期,而 DST nottmdate.tm_mday == 0 一样有效。因此time_t t 可能从午夜开始有 1 小时的休息时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
  • 2013-04-07
  • 2011-01-15
  • 2019-04-24
相关资源
最近更新 更多