gpt4 book ai didi

c++ - 使用 ctime 将给定日期提前到下一个日历日期的问题

转载 作者:行者123 更新时间:2023-11-28 07:57:53 31 4
gpt4 key购买 nike

我编写了以下代码将输入日期提前到下一个日历日期。这在用 g++ 4.1.2 编译的虚拟源文件中测试时效果很好

但是,当从我公司的模拟器中运行以下代码时(此时我无法获得其复杂的细节),它在 20021027 处中断;即对于 20021027 以外的日期,它按预期工作,但对于 20021027,它本身返回 20021027。

请告知可能出了什么问题?

int nextday(const int &date, int n=1)
{
struct tm curr_time;

int yyyy = curr_time.tm_year = date/10000-1900;
int mm = curr_time.tm_mon=(date/100)%100-1;
int dd = curr_time.tm_mday=date%100;
curr_time.tm_min=0;
curr_time.tm_sec=0;
curr_time.tm_hour=0;

time_t next = mktime(&curr_time) + 24*60*60*n;
struct tm new_time;
localtime_r(&next,&new_time);
yyyy = 1900 + new_time.tm_year;
mm = 1 + new_time.tm_mon;
dd = new_time.tm_mday;
return (10000*yyyy+100*mm+dd);
}

最佳答案

我不明白为什么那个约会会引起问题,但我不明白明白你为什么要以艰难的方式做事。只需添加一个到tm_mday字段在调用mktime之前,然后提取更正后的来自 struct tm 的值传递给 mktime。 (这是有原因的为什么指向 mktime 的指针指向非常量。)类似于:

int
nextday( int date, int n = 1 )
{
tm broken_down;
broken_down.tm_year = date / 10000 - 1900;
broken_down.tm_mon = (date / 100) % 100 - 1;
broken_down.tm_mday = date % 100 + n;
broken_down.tm_hour = 12; // avoid issues with summer time, etc.
broken_down.tm_min = 0;
broken_down.tm_sec = 0;
mktime( &broken_down );
return (broken_down.tm_year + 1900) * 10000
+ (broken_down.tm_mon + 1) * 100
+ broken_down.tm_mday;
}

(您可能想要添加一些完整性检查,即验证 int传入的确实代表了预期格式的日期,并且n 在一些合理的范围内。或者如果你能影响决定,使用一些标准的日期格式,所以你不必。)

无论如何,我怀疑模拟器存在问题,尤其是当它在本地使用相同的值时。

关于c++ - 使用 ctime 将给定日期提前到下一个日历日期的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12297007/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com