Aracılığıyla paylaş


Tarih ve Saat

MFC, tarih ve saatlerle çalışmanın çeşitli yollarını destekler:

  • Otomasyon DATE veri türü desteği. DATE tarih, saat ve tarih/saat değerlerini destekler. COleDateTime ve COleDateTimeSpan sınıfları bu işlevselliği kapsüller. Otomasyon desteğini kullanarak sınıfıyla COleVariant çalışır.

  • Genel amaçlı zaman sınıfları. CTime ve CTimeSpan sınıfları, içinde bildirilen time.hANSI standart saat kitaplığıyla ilişkili işlevlerin çoğunu kapsüller.

  • Sistem saati desteği. MFC sürüm 3.0 ile Win32 SYSTEMTIME ve FILETIME veri türleri için desteği eklendiCTime.

Tarih ve Saat: Otomasyon Desteği

sınıfı, COleDateTime tarih ve saat bilgilerini göstermek için bir yol sağlar. Sınıfından daha ayrıntılı ve daha geniş bir aralık CTime sağlar. sınıfı COleDateTimeSpan , iki COleDateTime nesne arasındaki fark gibi geçen süreyi temsil eder.

COleDateTime ve COleDateTimeSpan sınıfları sınıfıyla COleVariant kullanılmak üzere tasarlanmıştır. COleDateTime ve COleDateTimeSpan MFC veritabanı programlamasında da yararlıdır, ancak tarih ve saat değerlerini değiştirmek istediğinizde kullanılabilirler. sınıfı, sınıfından COleDateTime daha fazla değer aralığına ve daha ayrıntılı bir değer aralığına sahip olsa da, nesnesi başına değerinden CTime CTimedaha fazla depolama alanı gerektirir. Temel alınan TARİh türüyle çalışırken dikkat edilmesi gereken bazı özel noktalar da vardır. uygulaması DATEhakkında daha fazla bilgi için bkz. TürDATE.

COleDateTime nesneleri 1 Ocak 100 ile 31 Aralık 9999 arasındaki tarihleri temsil etmek için kullanılabilir. COleDateTime nesneler, yaklaşık 1 milisaniye çözünürlüğe sahip kayan nokta değerleridir. COleDateTime, altındaki COleDateTime::operator DATEMFC belgelerinde tanımlanan veri türünü temel alırDATE. gerçek uygulaması DATE bu sınırların ötesine uzanır. Uygulama, COleDateTime sınıfıyla çalışmayı kolaylaştırmak için bu sınırları uygular.

COleDateTime Jülyen tarihlerini desteklemez. Gregoryen takvimin zamanı 1 Ocak 100'e kadar uzatıldığı varsayılır.

COleDateTime Yaz Saati (DST) yoksayar. Aşağıdaki kod örneği, DST geçiş tarihini geçen bir zaman aralığını hesaplamanın iki yöntemini karşılaştırır: biri CRT'yi, diğeri ise kullanarak COleDateTime.

İlk yöntem, time1 standart C türü yapılarını tm ve time2kullanarak ve olmak üzere iki CTime nesneyi sırasıyla 5 Nisan ve time_t6 Nisan'a ayarlar. Kod ve aralarındaki zaman aralığını görüntüler time1 time2 .

İkinci yöntem ve olmak üzere iki COleDateTime nesne oletime1 oletime2oluşturur ve bunları ve time2ile time1 aynı tarihlere ayarlar. ve oletime2 aralarındaki zaman aralığını görüntüleroletime1.

CRT, 23 saatlik bir farkı doğru hesaplar. COleDateTimeSpan 24 saatlik bir fark hesaplar.

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);
}

Geçerli saati alma

Aşağıdaki yordamda, bir COleDateTime nesnenin nasıl oluşturulacağı ve geçerli saatle nasıl başlatileceği gösterilmektedir.

Geçerli saati almak için

  1. Bir COleDateTime nesne oluşturun.

  2. GetCurrentTime çağrısı yapın.

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

Geçen süreyi hesaplama

Bu yordam, iki COleDateTime nesne arasındaki farkı hesaplamayı ve bir COleDateTimeSpan sonuç almayı gösterir.

Geçen süreyi hesaplamak için

  1. İki COleDateTime nesne oluşturun.

  2. Nesnelerden COleDateTime birini geçerli saate ayarlayın.

  3. Zaman alan bir görev gerçekleştirin.

  4. Diğer COleDateTime nesneyi geçerli saate ayarlayın.

  5. İki kez arasındaki farkı alın.

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

Saati biçimlendirme

Saati biçimlendirmek için

Ya da COleDateTime COleDateTimeSpan öğesinin Format üye işlevini kullanarak saati veya geçen süreyi temsil eden bir karakter dizesi oluşturun.

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.   

Daha fazla bilgi için bkz. sınıfı COleVariant.

Tarih ve Saat: Veritabanı Desteği

Sürüm 4.0'dan itibaren MFC veritabanı programlaması, tarih ve saat verilerini göstermek için ve COleDateTimeSpan sınıflarını kullanırCOleDateTime. Otomasyon'da da kullanılan bu sınıflar sınıfından COleVarianttüretilir. Tarih ve saat verilerini yönetmek için ve CTimeSpanyerine daha CTime iyi destek sağlanır.

Tarih ve Saat: SYSTEMTIME Destek

sınıfı, COleDateTime Win32'den sistem ve dosya sürelerini kabul eden oluşturuculara sahiptir.

Win32 FILETIME yapısı zamanı 64 bit değer olarak temsil eder. Bu, iç depolama için bir yapıya göre daha kullanışlı bir SYSTEMTIME biçimdir ve Win32 tarafından dosya oluşturma zamanını göstermek için kullanılan biçimdir. Yapı hakkında SYSTEMTIME bilgi için bkz SYSTEMTIME. . Yapı hakkında FILETIME bilgi için bkz FILETIME. .

Ayrıca bkz.

Kavramlar
Genel MFC Konuları