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
veCOleDateTimeSpan
sınıfları bu işlevselliği kapsüller. Otomasyon desteğini kullanarak sınıfıylaCOleVariant
çalışır.Genel amaçlı zaman sınıfları.
CTime
veCTimeSpan
sınıfları, içinde bildirilentime.h
ANSI 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
veFILETIME
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
CTime
daha fazla depolama alanı gerektirir. Temel alınan TARİh türüyle çalışırken dikkat edilmesi gereken bazı özel noktalar da vardır. uygulaması DATE
hakkı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 DATE
MFC 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 time2
kullanarak ve olmak üzere iki CTime
nesneyi sırasıyla 5 Nisan ve time_t
6 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
oletime2
oluşturur ve bunları ve time2
ile 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
Bir
COleDateTime
nesne oluşturun.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
İki
COleDateTime
nesne oluşturun.Nesnelerden
COleDateTime
birini geçerli saate ayarlayın.Zaman alan bir görev gerçekleştirin.
Diğer
COleDateTime
nesneyi geçerli saate ayarlayın.İ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 COleVariant
türetilir. Tarih ve saat verilerini yönetmek için ve CTimeSpan
yerine 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
. .