2012-09-10 64 views
8

我正在C++中開發Appointment應用程序,並且想要使用某些日期和時間功能。C++日期和時間

談論日期和時間時是否更容易使用字符串,還是應該編寫或獲取日期/時間類?

我想編寫一個約會約會的時間和日期的約會類。一旦我編寫了類文件,我想要將它集成到C++ builder中的表單應用程序中。

我看到有一個TMonthCalendar控件。我想在製作表單應用程序時使用這個控件。因此,該控件使用什麼格式的日期?我想在製作課程時使用與控件相同的類型,以便我可以輕鬆地將它們集成到一起。

UPDATE

我發現它使用了TDateTime類型類型。我的問題是:我需要在控制檯應用程序中使用哪些包含聲明?

+4

我建議得到一些日期時間庫。請參閱[boost.datetime](http://www.boost.org/doc/libs/1_51_0/doc/html/date_time.html)。 – juanchopanza

+0

使用boost庫,或爲您需要的操作系統「日期」函數編寫簡單的類封裝器。如果要保存到數據庫,使用「DateTime」,否則使用字符串(可能是JSON字符串,也許是XML字符串,或者可能只是一個平面文件)可以讀取和寫入日期。 – paulsm4

回答

14

C++ 11包含日期/時間表示的便利數據類型和函數,以及它們向字符串的轉換。

有了這一點,你可以做這樣的事情(不言自明,我認爲):

#include <iostream> 
#include <iomanip> 
#include <ctime> 

int main() 
{ 
    std::time_t t = std::time(NULL); 
    std::tm tm = *std::localtime(&t); 
    std::cout << "Time right now is " << std::put_time(&tm, "%c %Z") << '\n'; 
} 

特別是,有數據類型std::time_tstd::tm,以及漂亮的一個很不錯的IO操縱std::put_time打印。它使用的格式字符串在cppreference有詳細記錄。

這也可以與地區一起使用,例如,爲日本時間/日期格式:

std::cout.imbue(std::locale("ja_JP.utf8")); 
std::cout << "ja_JP: " << std::put_time(&tm, "%c %Z") << '\n'; 

包含在C++ 11標準庫的chrono庫還可以讓你做簡單的時間/日期計算方便:

std::chrono::time_point<std::chrono::system_clock> now; 
now = std::chrono::system_clock::now(); 
/* The day before today: */ 
std::time_t now_c = std::chrono::system_clock::to_time_t(
     now - std::chrono::hours(24)); 

不幸的是,不所有這些在所有編譯器中都可用。特別是,std::put_time函數似乎還沒有在GCC 4.7.1中可用。爲了讓我給最初的工作,我只好用略少優雅std::strftime函數的代碼:

#include <iostream> 
#include <iomanip> 
#include <ctime> 

int main() 
{ 
    std::time_t t = std::time(NULL); 
    std::tm tm = *std::localtime(&t); 

    constexpr int bufsize = 100; 
    char buf[bufsize]; 
    if (std::strftime(buf,bufsize,"%c %Z",&tm) != 0) 
     std::cout << "Time right now is " << buf << std::endl; 
} 
1

談論的日期和時間是很容易,只需使用字符串?

不,即使是簡單的事情,如計算持續時間(如果您有會議開始和結束日期),也需要考慮諸如閏年之類的複雜事情。

我應該寫或獲得日期/時間類嗎?

號編寫日期/時間庫似乎很簡單,但它很難得到的權利和非常容易出錯。此外,其他人已經完成了 - boost is a collection of free libraries with stellar reputation。事實上,還有很多其他人,新手程序員想寫一個日期/時間庫,成爲一種陳詞濫調,failinghorriblyatit

我看到有一個TMonthCalendar控件。 [...]我發現它使用TDateTime類型。

依賴於您的GUI框架相同的日期/時間類是好的,但如果您以後更改GUI框架,它可能成爲一個問題。因爲稍後將一個合理的日期/時間庫換成另一個明智的日期/時間庫並不難,只需使用一個容易使用的庫。