C++日期时间分析
C++ datetime parse
我使用strptime
将日期时间字符串解析为tm
结构。但我遇到了一个问题:
我有这种格式的日期:
Thu Dec 13 23:44:45 MSK 2012
我用"%a %b %d %T"
格式字符串解析Thu Dec 13 23:44:45
。但我不明白如何解析年份。我不能只使用"%a %b %d %T MSK %Y"
因为我想要独立于语言环境的解析器。
我可以跳过MSK
字吗?还是任何其他解决问题的方法?
我没有找到答案,所以我编写了自己的日期时间解析器:
time_t timeParse(const char *string, struct tm *datetime)
{
char dn[4], mn[4], ln[4];
int d, h, m, s, y;
sscanf(string, "%s %s %d %d:%d:%d %s %d", dn, mn, &d, &h, &m, &s, ln, &y);
datetime->tm_sec = s;
datetime->tm_min = m;
datetime->tm_hour = h;
datetime->tm_mday = d;
if (!strcmp(mn, "Jan")) datetime->tm_mon = 0;
if (!strcmp(mn, "Feb")) datetime->tm_mon = 1;
if (!strcmp(mn, "Mar")) datetime->tm_mon = 2;
if (!strcmp(mn, "Apr")) datetime->tm_mon = 3;
if (!strcmp(mn, "May")) datetime->tm_mon = 4;
if (!strcmp(mn, "Jun")) datetime->tm_mon = 5;
if (!strcmp(mn, "Jul")) datetime->tm_mon = 6;
if (!strcmp(mn, "Aug")) datetime->tm_mon = 7;
if (!strcmp(mn, "Sep")) datetime->tm_mon = 8;
if (!strcmp(mn, "Oct")) datetime->tm_mon = 9;
if (!strcmp(mn, "Nov")) datetime->tm_mon = 10;
if (!strcmp(mn, "Dec")) datetime->tm_mon = 11;
datetime->tm_year = y - 1900;
return mktime(datetime);
}
我手动填写必要的tm structure
字段,mktime
填写其余字段:tm_wday
、tm_yday
、tm_isdst
。
你应该这样称呼它:
time_t t = timeParse("Thu Dec 13 23:44:45 MSK 2012", &datetime);
相关文章:
- 使用C++的日期库读取时间
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- 为什么在C++中获取日期和/或时间如此复杂?
- 在 MacOS 上C++:显示日期和时间问题
- 如何将我的每个矢量字符串转换为纪元时间日期
- 将 unix 时间戳转换为人类可读的日期
- 使用霍华德·欣南特的日期库将时间信息添加到year_month_day
- 注册表-获取值(而不是键)上次更改的时间和键创建日期
- 我的C++程序如何访问计算机的日期和时间以打印和使用当前年份?
- 使用 C++将时间戳转换为格式化的日期时间
- C++代码的 C# 日期时间等效项是什么?
- 以毫秒级精度对日期和时间进行操作
- 如何在提升日期时间中创建日期范围?
- 将日期字符串转换为 unix 时间戳
- C 自定义时间日期结构到UTC时期
- 使用SNTP(Windows C )从服务器获取时间/日期
- C 的SNTP客户端的时间/日期
- 将文件名的文件另存为当前时间日期
- 在没有宏的情况下获取编译时间日期和时间
- C++应用程序构建时间/日期保存