2012-09-10 5 views
8

C++에서 Appointment 응용 프로그램을 개발 중이며 일부 날짜 및 시간 기능을 사용하려고합니다.C++ 날짜 및 시간

날짜 및 시간에 대해 이야기 할 때 문자열을 사용하는 것이 더 쉽습니까? 아니면 날짜/시간 클래스를 작성하거나 가져야합니까?

약속의 시간과 날짜를 모두 포함하는 약속 클래스를 작성하고 싶습니다. 일단 클래스 파일을 코딩하면 C++ 빌더의 양식 응용 프로그램에 통합하려고합니다.

TMonthCalendar 컨트롤이 있음을 알았습니다. 양식 응용 프로그램을 만들 때이 컨트롤을 사용하고 싶습니다. 따라서이 컨트롤이 사용하는 날짜 형식은 무엇입니까? 클래스를 만들 때 컨트롤과 동일한 유형을 사용하여 쉽게 통합 할 수 있습니다.

UPDATE는

나는 그것이 TDateTime으로 유형을 사용하는 것으로 나타났습니다. 내 질문은 : 콘솔 응용 프로그램에서 이것을 사용하기 위해 필요한 include 문은 무엇입니까?

+4

날짜 시간 라이브러리를 가져 오는 것이 좋습니다. [boost.datetime] (http://www.boost.org/doc/libs/1_51_0/doc/html/date_time.html)을 참조하십시오. – juanchopanza

+0

부스트 라이브러리로 가거나 필요한 OS "날짜"기능을위한 간단한 클래스 래퍼를 작성하십시오. 데이터베이스에 저장하는 경우 "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::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)); 

하지 다음 chrono 라이브러리는 C++ 11 표준 라이브러리에 포함

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

도 편리 간단한 시간/날짜 연산을 수행 할 수 있습니다 이 모든 것은 아직 모든 컴파일러에서 사용할 수 있습니다. 특히, std::put_time 함수는 아직 GCC 4.7.1에서 사용할 수있는 것 같지 않습니다. 날짜 및 시간에 대해 이야기 할 때

#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

은 그냥 문자열을 사용하는 것이 더 쉽습니다 : 나는 약간 덜 우아한 std::strftime 기능을 사용했다, 작업을 처음 준 코드를 얻으려면? 모임의 시작과 끝 날짜가있는 경우 기간을 계산하는 등의

호 심지어 간단한 일이 같은 윤년 같은 복잡한 일을 설명해야합니다.

필자는 날짜/시간 클래스를 작성해야합니까? 날짜/시간 라이브러리를 작성

호는 간단 보이지만 오른쪽 잘못되기 매우 쉽게 얻을 다소 어렵습니다. 또한, 다른 사람들은 전에 그것을했습니다 - boost is a collection of free libraries with stellar reputation.실제로 초보 프로그래머가 날짜/시간 라이브러리를 쓰고 싶어하는 진부한 사람들이 많이 있습니다. failinghorriblyatit.

나는 TMonthCalendar 컨트롤이 있음을 알았습니다. [...] 나는 그것이 TDateTime 타입을 사용한다는 것을 발견했다.

GUI 프레임 워크와 동일한 날짜/시간 클래스를 사용하고 있지만 나중에 GUI 프레임 워크를 변경하면 문제가 될 수 있습니다. 나중에 다른 감각적 인 날짜/시간 라이브러리를위한 합리적인 날짜/시간 라이브러리를 교환하는 것은 그리 어렵지 않으므로 사용하기 쉬운 것을 사용하십시오.