다음을 통해 공유


날짜 및 시간

MFC는 날짜 및 시간을 사용하는 여러 가지 방법을 지원합니다.

  • Automation DATE 데이터 형식에 대한 지원. DATE 는 날짜, 시간 및 날짜/시간 값을 지원합니다. 및 COleDateTimeSpan 클래스는 COleDateTime 이 기능을 캡슐화합니다. 자동화 지원을 사용하여 클래스와 COleVariant 함께 작동합니다.

  • 범용 시간 클래스입니다. 및 CTimeSpan 클래스는 CTime ANSI 표준 시간 라이브러리와 연결된 대부분의 기능을 캡슐화합니다time.h.

  • 시스템 클록 지원. MFC 버전 3.0에서는 Win32 SYSTEMTIMEFILETIME 데이터 형식에 CTime 대한 지원이 추가되었습니다.

날짜 및 시간: 자동화 지원

이 클래스는 COleDateTime 날짜 및 시간 정보를 나타내는 방법을 제공합니다. 클래스보다 CTime 더 세분성 및 더 큰 범위를 제공합니다. 클래스는 COleDateTimeSpanCOleDateTime 개체 간의 차이와 같은 경과된 시간을 나타냅니다.

COleDateTimeSpan 클래스는 COleDateTime 클래스와 함께 COleVariant 사용하도록 설계되었습니다. COleDateTimeCOleDateTimeSpan MFC 데이터베이스 프로그래밍에도 유용하지만 날짜 및 시간 값을 조작할 때마다 사용할 수 있습니다. 클래스는 COleDateTime 클래스보다 CTime 값 범위가 크고 세분성이 더 크지만 개체 CTime당 스토리지가 더 많이 필요합니다. 기본 DATE 형식으로 작업할 때는 몇 가지 특별한 고려 사항도 있습니다. 구현DATE에 대한 자세한 내용은 형식 DATE 을 참조하세요.

COleDateTime 개체를 사용하여 100년 1월 1일과 9999년 12월 31일 사이의 날짜를 나타낼 수 있습니다. COleDateTime 개체는 대략적인 해상도가 1밀리초인 부동 소수점 값입니다. COleDateTime 는 아래의 DATE MFC 설명서 COleDateTime::operator DATE에 정의된 데이터 형식을 기반으로 합니다. 실제 구현 DATE 은 이러한 범위를 초과합니다. 구현은 COleDateTime 클래스를 더 쉽게 작업할 수 있도록 이러한 범위를 적용합니다.

COleDateTime 은 줄리안 날짜를 지원하지 않습니다. 그레고리오력은 100년 1월 1일로 다시 연장되는 것으로 간주됩니다.

COleDateTime 는 DST(일광 절약 시간)를 무시합니다. 다음 코드 예제에서는 DST 전환 날짜를 초과하는 시간 범위를 계산하는 두 가지 방법을 비교합니다. 하나는 CRT를 사용하고 다른 하나는 를 사용합니다 COleDateTime.

첫 번째 메서드는 표준 C 형식 구조 tm 체를 사용하여 두 CTime 개체 time1time2각각 4월 5일과 time_t4월 6일로 설정합니다. 코드가 time1 표시되고 time2 그 사이의 시간 범위가 표시됩니다.

두 번째 메서드는 두 개의 COleDateTime 개체를 oletime2oletime1 만들고, 동일한 날짜 time1time2로 설정합니다. 표시되고 oletime2 그 사이의 시간 범위가 표시됩니다oletime1.

CRT는 23시간의 차이를 올바르게 계산합니다. COleDateTimeSpan 는 24시간의 차이를 계산합니다.

void CDTDlg::OnPaint()
{
   CPaintDC dc(this); // device context for painting

   time_t date1_t, date2_t;
   tm date_tm;

   date_tm.tm_hour = 12;
   date_tm.tm_min = 0;
   date_tm.tm_mon = 3;
   date_tm.tm_sec = 0;
   date_tm.tm_wday = 0; //Day of week (0-6; Sunday = 0)
   date_tm.tm_yday = 0;
   date_tm.tm_year = 97;
   date_tm.tm_isdst = -1; //Positive if Daylight Saving Time is in effect;
                         //0 if Daylight Saving Time is not in effect; 
                         //Negative if status of DST is unknown.

   date_tm.tm_mday = 6;
   date2_t = mktime(&date_tm);

   date_tm.tm_mday = 5;
   date_tm.tm_isdst = 0;
   date1_t = mktime(&date_tm);

   CTime time1(date1_t), time2(date2_t);
   CTimeSpan ts = time2 - time1;

   dc.TextOut(0, 0, CString(_T("CTime")));
   dc.TextOut(0, 20, time1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 40, time2.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 60, ts.Format(_T("%H:%M:%S and %D days")));


   COleDateTime oletime1(date1_t), oletime2(date2_t);
   COleDateTimeSpan olets = oletime2 - oletime1;

   dc.TextOut(0, 120, CString(_T("COleDateTime")));
   dc.TextOut(0, 140, oletime1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 160, oletime2.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   
   //Work-around bug in COleDateTime::Format("%D")
   CString str;
   str.Format(_T("%s and %d days"), (LPCTSTR)olets.Format(_T("%H:%M:%S")), 
      olets.GetDays());
   dc.TextOut(0, 180, str);
}

현재 시간을 가져옵니다.

다음 절차에서는 개체를 COleDateTime 만들고 현재 시간으로 초기화하는 방법을 보여줍니다.

현재 시간을 얻으려면

  1. COleDateTime 개체를 만듭니다.

  2. GetCurrentTime을 호출합니다.

    COleDateTime timeNow;
    timeNow = COleDateTime::GetCurrentTime();   
    

경과 시간 계산

이 절차에서는 두 COleDateTime 개체의 차이를 계산하고 결과를 가져오는 COleDateTimeSpan 방법을 보여줍니다.

경과 시간을 계산하려면

  1. 두 개체 COleDateTime 를 만듭니다.

  2. 개체 중 COleDateTime 하나를 현재 시간으로 설정합니다.

  3. 시간이 많이 걸리는 작업을 수행합니다.

  4. 다른 COleDateTime 개체를 현재 시간으로 설정합니다.

  5. 두 번 사이의 차이를 가져 가라.

    COleDateTime timeStart, timeEnd;
    timeStart = COleDateTime::GetCurrentTime();
    // ... perform time-consuming task
    timeEnd = COleDateTime::GetCurrentTime();
    COleDateTimeSpan spanElapsed = timeEnd - timeStart;   
    

시간 서식 지정

시간 서식을 지정하려면

멤버 함수를 FormatCOleDateTime 사용하거나 시간 또는 COleDateTimeSpan 경과 시간을 나타내는 문자 문자열을 만듭니다.

COleDateTime time(1970, 12, 18, 17, 30, 0);
// 18 December 1970, 5:30 PM
CString s = time.Format(VAR_DATEVALUEONLY);
// s contains the date formatted based on 
// the current national language specifications
// (locale ID). The time portion is ignored for 
// formatting purposes in this case.   

자세한 내용은 COleVariant 클래스를 참조하세요.

날짜 및 시간: 데이터베이스 지원

버전 4.0부터 MFC 데이터베이스 프로그래밍은 날짜 및 시간 데이터를 나타내기 위해 클래스 COleDateTimeSpan 와 클래스를 사용합니다COleDateTime. Automation에도 사용되는 이러한 클래스는 클래스 COleVariant에서 파생됩니다. 날짜 및 시간 데이터를 CTimeCTimeSpan관리하는 데 더 나은 지원을 제공합니다.

날짜 및 시간: SYSTEMTIME 지원

COleDateTime 클래스에는 Win32의 시스템 및 파일 시간을 허용하는 생성자가 있습니다.

Win32 FILETIME 구조체는 시간을 64비트 값으로 나타냅니다. 구조체보다 SYSTEMTIME 내부 스토리지에 더 편리한 형식이며 Win32에서 파일 생성 시간을 나타내는 데 사용하는 형식입니다. 구조에 대한 자세한 내용은 을 SYSTEMTIME 참조하세요 SYSTEMTIME. 구조에 대한 자세한 내용은 을 FILETIME 참조하세요 FILETIME.

참고 항목

개념
일반 MFC 항목