我有一系列日期字符串格式为:“30-05-2001”
string date1 = "30-05-2001";
我想将日期解析为日,月,年。现在一个简单的方法 这样做只是调用函数sscanf。但是我想 探索其他可能性,并从网上搜索以下内容 推荐使用time.h中的函数:
char *strptime(const char *buf, const char *format, struct tm *tm);
有没有人有使用此功能的经验?一些简短的例子就是 很有帮助。
谢谢!
答案 0 :(得分:3)
std::istringstream buffer("30-05-2001");
int day = 0;
int month = 0;
int year = 0;
char dummy = 0;
buffer >> day >> dummy >> month >> dummy >> year;
// TODO: validate values here
如果您还要验证虚拟等于'-'
,则可以对数据执行不同的读取。
答案 1 :(得分:1)
#include <time.h>
...
struct tm tm;
time_t t;
if (strptime("6 Dec 2001 12:33:45", "%d %b %Y %H:%M:%S", &tm) == NULL)
/* Handle error */;
printf("year: %d; month: %d; day: %d;\n",
tm.tm_year, tm.tm_mon, tm.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",
tm.tm_hour, tm.tm_min, tm.tm_sec);
printf("week day: %d; year day: %d\n", tm.tm_wday, tm.tm_yday);
tm.tm_isdst = -1; /* Not set by strptime(); tells mktime()
to determine whether daylight saving time
is in effect */
t = mktime(&tm);
if (t == -1)
/* Handle error */;
printf("seconds since the Epoch: %ld\n", (long) t);"
答案 2 :(得分:1)
有关示例,请参阅here。还有很好的解释如何使用转换说明符等。
编辑:KMan更快:)
Edit2:链接导致
的解释char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tm);
还有一个关于如何使用的简短示例。
提供本网站Open Group Base规范 第6期IEEE Std 1003.1,2004版
答案 3 :(得分:1)