Bagikan melalui


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. Kelas COleDateTime dan COleDateTimeSpan merangkum fungsionalitas ini. Mereka bekerja dengan COleVariant kelas menggunakan dukungan Automation.

  • Kelas waktu tujuan umum. Kelas CTime dan CTimeSpan merangkum sebagian besar fungsionalitas yang terkait dengan pustaka waktu standar ANSI, yang dideklarasikan dalam time.h.

  • Dukungan untuk jam sistem. Dengan MFC versi 3.0, dukungan ditambahkan ke CTime untuk Win32 SYSTEMTIME dan FILETIME 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

  1. Buat objek COleDateTime.

  2. 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

  1. Buat dua COleDateTime objek.

  2. Atur COleDateTime salah satu objek ke waktu saat ini.

  3. Lakukan beberapa tugas yang memakan waktu.

  4. Atur objek lain COleDateTime ke waktu saat ini.

  5. 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.

Lihat juga

Konsep
Topik MFC Umum