【发布时间】:2010-09-30 06:03:29
【问题描述】:
我有一些代码使用 Oracle 函数 add_months 将日期增加 X 个月。
我现在需要在 C/C++ 函数中重新实现相同的逻辑。由于我不想/不需要进入的原因,我不能简单地向 oracle 发出查询以获取新日期。
有人知道将 X 个月数添加到 time_t 的简单可靠的方法吗? 下面显示了一些计算类型的示例。
30/01/2009 + 1 个月 = 28/02/2009
2009 年 1 月 31 日 + 1 个月 = 2009 年 2 月 28 日
2009 年 2 月 27 日 + 1 个月 = 2009 年 3 月 27 日
2009 年 2 月 28 日 + 1 个月 = 2009 年 3 月 31 日
2009 年 1 月 31 日 + 50 个月 = 2013 年 3 月 31 日
【问题讨论】:
-
正如 Mehrdad Afshari 在下面指出的那样,28/02/2009 + 1 个月 = 31/03/2009 不可能使用简单类型。你怎么知道 28/02/2009 是“一个月的最后一天”而不是“一个月的第 28 天”。它根本没有在类型中编码。你需要更好的表现形式。
-
我认为 28/02/2009 + 1 个月 = 31/03/2009 是错误的。它应该是 28/02/2009 + 1 个月 = 28/03/2009。从 .Net 的行为方式来看,唯一不会导致当月同一天的示例是生成的月份的天数少于原始月份的天数。即:2009 年 1 月 31 日 + 1 个月 = 2009 年 2 月 28 日
-
现在我重新阅读了您的示例,您似乎真正在寻找的是如何在未来一个月的某个时间查找本月的最后一天,这是一个略有不同的问题.
-
微妙:30/1/2009 + 1 个月 + 1 个月 = 28/3/2009 !
-
@MSalters 更微妙的是:
30/1/2009 +1 month - 1 month = 28/1/2009。这似乎是定义月份的不好方法。
标签: c++ c date time-t date-math