c oracle time,在C/C++中添加1个月到time_t的简单方法
我有一些代碼使用Oracle函數add_months將Date增加X個月.
我現在需要在C/C++函數中重新實現相同的邏輯.由于我不想/需要進入的原因,我不能簡單地向oracle發出查詢以獲取新日期.
有沒有人知道在time_t中添加X個月的簡單可靠的方法?
計算類型的一些示例如下所示.
30/01/2009 1月= 28/02/2009
31/01/2009 1月= 28/02/2009
27/02/2009 1月= 27/03/2009
28/02/2009 1月= 31/03/2009
31/01/2009 50個月= 31/03/2013
301_16@
方法AddMonths_OracleStyle可以滿足您的需求.
也許你想要將IsLeapYear和GetDaysInMonth替換為一些圖書管理員方法.
#include
#include
bool IsLeapYear(int year)
{
if (year % 4 != 0) return false;
if (year % 400 == 0) return true;
if (year % 100 == 0) return false;
return true;
}
int daysInMonths[] = {31,28,31,30,31};
int GetDaysInMonth(int year,int month)
{
assert(month >= 0);
assert(month < 12);
int days = daysInMonths[month];
if (month == 1 && IsLeapYear(year)) // February of a leap year
days += 1;
return days;
}
tm AddMonths_OracleStyle(const tm &d,int months)
{
bool isLastDayInMonth = d.tm_mday == GetDaysInMonth(d.tm_year,d.tm_mon);
int year = d.tm_year + months / 12;
int month = d.tm_mon + months % 12;
if (month > 11)
{
year += 1;
month -= 12;
}
int day;
if (isLastDayInMonth)
day = GetDaysInMonth(year,month); // Last day of month maps to last day of result month
else
day = std::min(d.tm_mday,GetDaysInMonth(year,month));
tm result = tm();
result.tm_year = year;
result.tm_mon = month;
result.tm_mday = day;
result.tm_hour = d.tm_hour;
result.tm_min = d.tm_min;
result.tm_sec = d.tm_sec;
return result;
}
time_t AddMonths_OracleStyle(const time_t &date,int months)
{
tm d = tm();
localtime_s(&d,&date);
tm result = AddMonths_OracleStyle(d,months);
return mktime(&result);
}
總結
以上是生活随笔為你收集整理的c oracle time,在C/C++中添加1个月到time_t的简单方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle语句加减,oracle时间加
- 下一篇: linux脚本日期时间,Linux 日期