2012-11-06 191 views
1

如何從C++的日期數中計算日期?我不需要你編寫整個代碼,我只是無法弄清楚計算月份和月份的數學方法!從日數計算日期?

例子:

input: 1 
output: 01/01/2012 

input: 10 
output: 01/10/2012 

input: 365 
output: 12/31/2012 

它總是使用當前的一年,如果超過365,我將返回0。沒有必要爲一個閏年檢測。

+1

如果沒有庫函數,我從來沒有找到一種方法來做到這一點沒有一個查找表。 12個參賽作品,每個作品在年份中的天數*到*該月份。然後,只需獲得一個月,查看並添加一天。 –

回答

8

使用日期計算庫作爲例如細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 
1

它也不是很難用標準庫。原諒我,如果我寫的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; 
} 

對不起,我不知道一個理智的方式做到這一點沒有閏年檢測。

1

簡單片斷從程序,假定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];