strftime没有正确显示年份

时间:2010-04-05 14:29:02

标签: c++ datetime time

我有以下代码:

const char* timeformat = "%Y-%m-%d %H:%M:%S";
const int timelength = 20;
char timecstring[timelength];

strftime(timecstring, timelength, timeformat, currentstruct);

cout << "timecstring is: " << timecstring << "\n";

电流结构是一个tm *。 cout给了我正确格式的日期,但是这一年不是2010年,而是3910.我知道这与1900年开始的年份有关,但我不知道如何让strftime认识到这一点而不是添加1900到那里的2010年的价值,任何人都可以帮助。

此致

3 个答案:

答案 0 :(得分:5)

根据定义,tm_year的{​​{1}}字段是自1900年以来的年数。处理struct tm的每一段代码都预计会出现这种情况。您无法将struct tm设置为2010,并期望代码能够神奇地确定您真正意味着2010年而不是3910年。

tm_year设置为110,tm_year将有效。

答案 1 :(得分:3)

当您将年份放入currentstruct时,您显然会加入2010,但您需要输入2010-1900

如果您从系统中检索时间并使用类似struct tm的内容转换为localtime,则不需要进行任何减法,因为它会将其放入{{1}已经是1900年了。当你“手动”填写年份时,你需要减去1900。

答案 2 :(得分:0)

currentstruct->tm_year看起来像2010,这意味着3910年中的日期。为了使其正确,所以它表示这个年中的日期,而你必须做一个

currentstruct->tm_year -= 1900;

没有办法告诉strftime(或其他系统函数)你的struct tm实际上不是struct tm,因为它遵循的不同于系统强加的约定(例如,你想要从0开始而不是从1900年开始。