Tanggal, waktu, dan zona waktu
.NET menyediakan jenis yang mewakili tanggal, waktu, dan zona waktu. Artikel ini menjelaskan jenis-jenis tersebut.
Selain struktur DateTime dasar, .NET menyediakan kelas berikut yang mendukung bekerja dengan zona waktu:
-
Gunakan kelas ini untuk bekerja dengan zona waktu apa pun yang telah ditentukan sebelumnya pada sistem, untuk membuat zona waktu baru, dan untuk dengan mudah mengonversi tanggal dan waktu dari satu zona waktu ke zona waktu lainnya. Untuk pengembangan baru, gunakan kelas TimeZoneInfo alih-alih kelas TimeZone.
-
Gunakan struktur ini untuk bekerja dengan tanggal dan waktu yang offsetnya (atau perbedaannya) dari UTC diketahui. Struktur DateTimeOffset menggabungkan nilai tanggal dan waktu dengan offset waktu tersebut dari UTC. Karena hubungannya dengan UTC, nilai tanggal dan waktu individu secara tidak ambigu mengidentifikasi satu titik waktu. Ini membuat nilai DateTimeOffset lebih portabel dari satu komputer ke komputer lain daripada nilai DateTime.
Kelas berikut digunakan untuk mendukung pengelolaan waktu:
-
Gunakan struktur ini untuk mewakili interval waktu, seperti jumlah waktu yang berlalu atau perbedaan antara dua tanggal.
-
Gunakan struktur ini untuk mewakili waktu tanpa tanggal. Waktu mewakili jam, menit, dan detik dari hari yang tidak spesifik.
TimeOnly
memiliki rentang dari00:00:00.0000000
hingga23:59:59.9999999
. Jenis ini dapat digunakan untuk mengganti jenisDateTime
danTimeSpan
dalam kode Anda saat Anda menggunakan jenis tersebut untuk mewakili waktu. Untuk informasi selengkapnya, lihat Cara menggunakan struktur DateOnly dan TimeOnly.Penting
TimeOnly tidak tersedia untuk .NET Framework.
-
Ini adalah kelas dasar yang memberikan abstraksi waktu. Cara umum untuk memeriksa waktu saat ini adalah dengan menggunakan
DateTime.UtcNow
atauDateTimeOffset.UtcNow
. Namun, jenis ini tidak memberikan kontrol apa pun atas apa yang dianggap "sekarang." Mengapa Anda ingin mengontrol itu? Kemampuan uji coba. Misalnya, pertimbangkan untuk menulis aplikasi pelacakan peristiwa yang menyediakan pengingat 1 hari sebelum acara. Logika aplikasi adalah memeriksa waktu peristiwa setiap jam, dan memperingatkan pengguna setelah 24 jam sebelum acara. Saat Anda menulis pengujian untuk aplikasi, Anda akan menyediakan tipe Anda sendiri yang membungkusDateTimeOffset.UtcNow
untuk menguji logika ini, namun sekarang .NET menyediakan kelas abstraksi ini untuk Anda.Untuk informasi selengkapnya, lihat Apa itu TimeProvider.
Jenis
TimeProvider
disertakan dalam .NET.Untuk .NET Framework dan .NET Standard,
disediakan oleh paket Microsoft.Bcl.TimeProvider NuGet.
Berikut adalah kelas-kelas yang mendukung pengelolaan tanggal:
-
Gunakan struktur ini saat bekerja dengan nilai yang hanya mewakili tanggal. Tanggal menunjukkan seluruh hari, dari awal hari hingga akhir.
DateOnly
memiliki rentang dari0001-01-01
hingga9999-12-31
. Dan, jenis ini mewakili kombinasi bulan, hari, dan tahun tanpa waktu tertentu. Jika sebelumnya Anda menggunakan jenisDateTime
dalam kode Anda untuk mewakili tanggal yang mengacuhkan waktu, gunakan jenis ini di tempatnya. Untuk informasi selengkapnya, lihat Cara menggunakan struktur DateOnly dan TimeOnly.Penting
DateOnly tidak tersedia untuk .NET Framework.
Bagian berikutnya menyediakan informasi yang Anda butuhkan untuk bekerja dengan zona waktu dan untuk membuat aplikasi sadar zona waktu yang dapat mengonversi tanggal dan waktu dari satu zona waktu ke zona waktu lainnya.
Di bagian ini
gambaran umum zona waktu
Membahas terminologi, konsep, dan masalah yang terlibat dalam pembuatan aplikasi sadar zona waktu.
Memilih antara DateTime, DateTimeOffset, TimeSpan, dan TimeZoneInfo
Membahas kapan harus menggunakan jenis DateTime, DateTimeOffset, dan TimeZoneInfo saat bekerja dengan data tanggal dan waktu.
Menemukan zona waktu yang ditentukan pada sistem lokal
Menjelaskan cara menghitung zona waktu yang ditemukan pada sistem lokal.
Cara: Menghitung zona waktu yang ada di komputer
Menyediakan contoh yang menghitung zona waktu yang ditentukan dalam registri komputer dan yang memungkinkan pengguna memilih zona waktu yang telah ditentukan sebelumnya dari daftar.
Cara: Mengakses objek UTC dan zona waktu lokal yang telah ditentukan sebelumnya
Menjelaskan cara mengakses Waktu Universal Terkoordinasi dan zona waktu lokal.
Cara: Membuat instans objek TimeZoneInfo
Menjelaskan cara membuat instans objek TimeZoneInfo dari registri sistem lokal.
Membuat objek DateTimeOffset
Membahas cara-cara di mana objek DateTimeOffset dapat dibuat, dan cara di mana nilai DateTime dapat dikonversi ke nilai DateTimeOffset.
Cara: Membuat zona waktu tanpa aturan penyesuaian
Menjelaskan cara membuat zona waktu kustom yang tidak mendukung transisi ke dan dari waktu musim panas.
Cara: Membuat zona waktu dengan aturan penyesuaian
Menjelaskan cara membuat zona waktu kustom yang mendukung satu atau beberapa transisi ke dan dari waktu musim panas.
Menyimpan dan memulihkan zona waktu
Menjelaskan TimeZoneInfo dukungan untuk serialisasi dan deserialisasi data zona waktu dan mengilustrasikan beberapa skenario di mana fitur-fitur ini dapat digunakan.
Cara: Menyimpan zona waktu ke sumber daya yang disematkan
Menjelaskan cara membuat zona waktu kustom dan menyimpan informasinya dalam file sumber daya.
Cara: Memulihkan zona waktu dari sumber daya yang disematkan
Menjelaskan cara membuat instans zona waktu kustom yang telah disimpan ke file sumber daya yang disematkan.
Melakukan operasi aritmatika dengan tanggal dan waktu
Membahas masalah yang terlibat dalam menambahkan, mengurangi, dan membandingkan nilai DateTime dan DateTimeOffset.
Panduan: Menggunakan zona waktu dalam penghitungan tanggal dan waktu
Membahas cara melakukan aritmatika tanggal dan waktu yang mencerminkan aturan penyesuaian zona waktu.
Mengonversi antara DateTime dan DateTimeOffset
Menjelaskan cara mengonversi antara nilai DateTime dan DateTimeOffset.
Waktu konversi antara zona waktu
Menjelaskan cara mengonversi waktu dari satu zona waktu ke zona waktu lainnya.
Cara: Mengatasi waktu ambigu
Menjelaskan cara mengatasi waktu ambigu dengan memetakannya ke waktu standar zona waktu.
Cara: Memungkinkan pengguna menyelesaikan waktu ambigu
Menjelaskan cara membiarkan pengguna menentukan pemetaan antara waktu lokal yang ambigu dan Waktu Universal Terkoordinasi.