如何從C++的日期數中計算日期?我不需要你編寫整個代碼,我只是無法弄清楚計算月份和月份的數學方法!從日數計算日期?
例子:
input: 1
output: 01/01/2012
input: 10
output: 01/10/2012
input: 365
output: 12/31/2012
它總是使用當前的一年,如果超過365,我將返回0。沒有必要爲一個閏年檢測。
如何從C++的日期數中計算日期?我不需要你編寫整個代碼,我只是無法弄清楚計算月份和月份的數學方法!從日數計算日期?
例子:
input: 1
output: 01/01/2012
input: 10
output: 01/10/2012
input: 365
output: 12/31/2012
它總是使用當前的一年,如果超過365,我將返回0。沒有必要爲一個閏年檢測。
使用日期計算庫作爲例如細Boost Date_Time庫與此成爲
using namespace boost::gregorian;
date d(2012,Jan,1); // or one of the other constructors
date d2 = d + days(365); // or your other offsets
它也不是很難用標準庫。原諒我,如果我寫的C++代碼像C程序員(C++的<ctime>
沒有折返gmtime
功能):
#include <time.h>
#include <cstdio>
int main(int argc, char *argv[])
{
tm t;
int daynum = 10;
time_t now = time(NULL);
gmtime_r(&now, &t);
t.tm_sec = 0;
t.tm_min = 0;
t.tm_hour = 0;
t.tm_mday = 1;
t.tm_mon = 1;
time_t ref = mktime(&t);
time_t day = ref + (daynum - 1) * 86400;
gmtime_r(&day, &t);
std::printf("%02d/%02d/%04d\n", t.tm_mon, t.tm_mday, 1900 + t.tm_year);
return 0;
}
對不起,我不知道一個理智的方式做到這一點沒有閏年檢測。
簡單片斷從程序,假定365天一年:
int input, day, month = 0, months[13] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365};
while (input > 365) {
// Parse the input to be less than or equal to 365
input -= 365;
}
while (months[month] < input) {
// Figure out the correct month.
month++;
}
// Get the day thanks to the months array
day = input - months[month - 1];
如果沒有庫函數,我從來沒有找到一種方法來做到這一點沒有一個查找表。 12個參賽作品,每個作品在年份中的天數*到*該月份。然後,只需獲得一個月,查看並添加一天。 –