用C ++格式化日期

时间:2010-07-16 09:52:14

标签: c++ datetime formatting

我有一系列日期字符串格式为:“30-05-2001”

string date1 = "30-05-2001";

我想将日期解析为日,月,年。现在一个简单的方法 这样做只是调用函数sscanf。但是我想 探索其他可能性,并从网上搜索以下内容 推荐使用time.h中的函数:

char *strptime(const char *buf, const char *format, struct tm *tm); 

有没有人有使用此功能的经验?一些简短的例子就是 很有帮助。

谢谢!

4 个答案:

答案 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)

Source

#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)