SoI*_*ins 0 c datetime localtime mktime
我正在制作一个日历程序。“展开重复事件”代码给我带来了无穷无尽的麻烦。我通过使用 mktime() 来扩展事件以获得“纯”时间值,然后向其添加重复增量(在本例中为 604800 秒或 7 天)。然后使用 localtime() 来获取日历结构。
有时候是这样的:
原始事件:9 月 10 日
{tm_sec = 0, tm_min = 0, tm_hour = 16, tm_mday = 10, tm_mon = 9,
tm_year = 2012, tm_wday = 4, tm_yday = 283, tm_isdst = 0,
tm_gmtoff = -25200, tm_zone = 0x608ff0 "PDT"}
Run Code Online (Sandbox Code Playgroud)
第一次重复:9月17日
{tm_sec = 0, tm_min = 0, tm_hour = 17, tm_mday = 17, tm_mon = 9,
tm_year = 2012, tm_wday = 4, tm_yday = 290, tm_isdst = 1,
tm_gmtoff = -25200, tm_zone = 0x608ff0 "PDT"}
Run Code Online (Sandbox Code Playgroud)
第二次重复:9月24日
{tm_sec = 0, tm_min = 0, tm_hour = 16, tm_mday = 24, tm_mon = 9,
tm_year = 2012, tm_wday = 4, tm_yday = 297, tm_isdst = 0,
tm_gmtoff = -25200, tm_zone = 0x608ff0 "PDT"}
Run Code Online (Sandbox Code Playgroud)
第三次重复:9月31日?!
{tm_sec = 0, tm_min = 0, tm_hour = 16, tm_mday = 31, tm_mon = 9,
tm_year = 2012, tm_wday = 4, tm_yday = 304, tm_isdst = 0,
tm_gmtoff = -25200, tm_zone = 0x608ff0 "PDT"}
Run Code Online (Sandbox Code Playgroud)
有谁知道这里发生了什么事吗?需要我localtime()自己填写吗?
小智 6
从文档中可以看出:该结构的成员struct tm是从 0 开始的(通常在 C 中)。
int tm_mon month of year [0,11]
Run Code Online (Sandbox Code Playgroud)
所以实际上编号的月份9是第 10 个月,即 10 月,有 31 天。