我有以下代码:
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年的价值,任何人都可以帮助。
此致
保
答案 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年开始。