Tanggal dan Waktu
MFC mendukung beberapa cara bekerja dengan tanggal dan waktu yang berbeda:
Dukungan untuk jenis data Automation.
DATE
DATE
mendukung nilai tanggal, waktu, dan tanggal/waktu. KelasCOleDateTime
danCOleDateTimeSpan
merangkum fungsionalitas ini. Mereka bekerja denganCOleVariant
kelas menggunakan dukungan Automation.Kelas waktu tujuan umum. Kelas
CTime
danCTimeSpan
merangkum sebagian besar fungsionalitas yang terkait dengan pustaka waktu standar ANSI, yang dideklarasikan dalamtime.h
.Dukungan untuk jam sistem. Dengan MFC versi 3.0, dukungan ditambahkan ke
CTime
untuk Win32SYSTEMTIME
danFILETIME
jenis data.
Tanggal dan Waktu: Dukungan Automation
Kelas COleDateTime
menyediakan cara untuk mewakili informasi tanggal dan waktu. Ini memberikan granularitas yang lebih halus dan rentang yang lebih besar dari CTime
kelas. Kelas COleDateTimeSpan
mewakili waktu yang berlalu, seperti perbedaan antara dua COleDateTime
objek.
Kelas COleDateTime
dan COleDateTimeSpan
dirancang untuk digunakan dengan COleVariant
kelas . COleDateTime
dan COleDateTimeSpan
juga berguna dalam pemrograman database MFC, tetapi dapat digunakan kapan pun Anda ingin memanipulasi nilai tanggal dan waktu. COleDateTime
Meskipun kelas memiliki rentang nilai yang lebih besar dan granularitas yang lebih halus daripada CTime
kelas , kelas ini membutuhkan lebih banyak penyimpanan per objek daripada CTime
. Ada juga beberapa pertimbangan khusus saat bekerja dengan jenis DATE yang mendasar. Untuk informasi selengkapnya tentang implementasi DATE
, lihat DATE
Jenis.
COleDateTime
objek dapat digunakan untuk mewakili tanggal antara 1 Januari 100, dan 31 Desember 9999. COleDateTime
objek adalah nilai titik mengambang, dengan perkiraan resolusi 1 milidetik. COleDateTime
didasarkan pada DATE
jenis data, yang ditentukan dalam dokumentasi MFC di bawah COleDateTime::operator DATE
. Implementasi aktual meluas DATE
di luar batas-batas ini. Implementasi COleDateTime
memberlakukan batas-batas ini untuk mempermudah bekerja dengan kelas.
COleDateTime
tidak mendukung tanggal Julian. Kalender Gregorian diasumsikan untuk memperpanjang waktu kembali ke 1 Januari 100.
COleDateTime
mengabaikan Daylight Saving Time (DST). Contoh kode berikut membandingkan dua metode menghitung rentang waktu yang melewati tanggal pengalihan DST: satu menggunakan CRT, dan yang lainnya menggunakan COleDateTime
.
Metode pertama menetapkan dua CTime
objek, time1
dan time2
, ke 5 April dan 6 April masing-masing, menggunakan struktur tm
jenis C standar dan time_t
. Kode ditampilkan time1
dan time2
dan rentang waktu di antaranya.
Metode kedua membuat dua COleDateTime
objek, oletime1
dan oletime2
, dan mengaturnya ke tanggal yang sama dengan time1
dan time2
. Ini menampilkan oletime1
dan oletime2
dan rentang waktu di antaranya.
CRT menghitung selisih 23 jam dengan benar. COleDateTimeSpan
menghitung selisih 24 jam.
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);
}
Dapatkan waktu saat ini
Prosedur berikut menunjukkan cara membuat COleDateTime
objek dan menginisialisasinya dengan waktu saat ini.
Untuk mendapatkan waktu saat ini
Buat objek
COleDateTime
.Panggil
GetCurrentTime
.COleDateTime timeNow; timeNow = COleDateTime::GetCurrentTime();
Menghitung waktu yang berlalu
Prosedur ini menunjukkan cara menghitung perbedaan antara dua COleDateTime
objek dan mendapatkan COleDateTimeSpan
hasilnya.
Untuk menghitung waktu yang berlalu
Buat dua
COleDateTime
objek.Atur
COleDateTime
salah satu objek ke waktu saat ini.Lakukan beberapa tugas yang memakan waktu.
Atur objek lain
COleDateTime
ke waktu saat ini.Ambil perbedaan antara dua kali.
COleDateTime timeStart, timeEnd; timeStart = COleDateTime::GetCurrentTime(); // ... perform time-consuming task timeEnd = COleDateTime::GetCurrentTime(); COleDateTimeSpan spanElapsed = timeEnd - timeStart;
Memformat waktu
Untuk memformat waktu
Format
Gunakan fungsi anggota dari salah satu COleDateTime
atau COleDateTimeSpan
untuk membuat string karakter yang mewakili waktu atau waktu yang berlalu.
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.
Untuk informasi lebih lanjut, lihat kelas COleVariant
.
Tanggal dan Waktu: Dukungan Database
Mulai versi 4.0, pemrograman database MFC menggunakan COleDateTime
kelas dan COleDateTimeSpan
untuk mewakili data tanggal dan waktu. Kelas-kelas ini, juga digunakan dalam Automation, berasal dari kelas COleVariant
. Mereka memberikan dukungan yang lebih baik untuk mengelola data tanggal dan waktu daripada melakukan CTime
dan CTimeSpan
.
Tanggal dan Waktu: SYSTEMTIME
Dukungan
Kelas ini COleDateTime
memiliki konstruktor yang menerima sistem dan waktu file dari Win32.
Struktur Win32 FILETIME
mewakili waktu sebagai nilai 64-bit. Ini adalah format yang lebih nyaman untuk penyimpanan internal daripada SYSTEMTIME
struktur, dan format yang digunakan oleh Win32 untuk mewakili waktu pembuatan file. Untuk informasi tentang SYSTEMTIME
struktur, lihat SYSTEMTIME
. Untuk informasi tentang FILETIME
struktur, lihat FILETIME
.