2011-04-26 53 views
11

給定一天,一個月和一年,算法返回一週中的哪一天?日期到星期的算法?

+3

維基百科上的倍數:【計算一週的某一天(HTTP:// EN .wikipedia.org /維基/ Calculating_the_day_of_the_week)。 – hammar 2011-04-26 23:54:14

+1

您可以在五秒鐘內用Google進行搜索。這是另一個關於它的問題:http://stackoverflow.com/questions/3017745/given-date-get-day-of-week-systemtime – darvids0n 2011-04-26 23:55:01

+0

@darvid:這是一個Windows特定的問答,我不認爲它很重要。 – Potatoswatter 2011-04-26 23:57:23

回答

22

這可以使用std::mktimestd::localtime函數完成。這些函數不僅僅是POSIX,它們是由C++標準(C++ 03§20.5)規定的。

#include <ctime> 

std::tm time_in = { 0, 0, 0, // second, minute, hour 
     4, 9, 1984 - 1900 }; // 1-based day, 0-based month, year since 1900 

std::time_t time_temp = std::mktime(& time_in); 

// the return value from localtime is a static global - do not call 
// this function from more than one thread! 
std::tm const *time_out = std::localtime(& time_temp); 

std::cout << "I was born on (Sunday = 0) D.O.W. " << time_out->tm_wday << '\n'; 
+2

+1 upvoted。也投票重新打開這個問題。也許它是一個堆棧溢出重複,我不知道。但這是一個真正的C++問題(被關閉不是一個真正的問題),這是一個很好的答案。 – 2011-04-27 00:51:19

+0

嗯,得到了一個downvote。不知道爲什麼,但請注意'std :: localtime'不是線程安全的。請參閱[本問答](http://stackoverflow.com/q/7313919/153285)。 – Potatoswatter 2014-03-26 09:55:07

+0

我知道他接受的答案,但不是他真正要求的答案。 – 2014-03-26 18:43:28

0

你需要一個起點。今天很好。對它進行硬編碼。

然後,您需要表示一個月中的天數。這是31日,28日,31日,30日,31日,30日......。因此,您可以開始每週添加和減去365%7到每週的一天,以及(月的差額總和)%7。等等。

的警告:發生閏年每4年,但不是每一個100的,除非這一年也是400

+0

我可以去那。硬編碼完全沒問題。 – 2016-07-02 07:16:14

相關問題