DateTime Struktur

Definisi

Mewakili instan dalam waktu, biasanya dinyatakan sebagai tanggal dan jam hari.

public value class DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable
public value class DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System::Runtime::Serialization::ISerializable
public value class DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, ISpanFormattable, System::Runtime::Serialization::ISerializable
public value class DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IParsable<DateTime>, ISpanFormattable, ISpanParsable<DateTime>, System::Runtime::Serialization::ISerializable
public value class DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IParsable<DateTime>, ISpanFormattable, ISpanParsable<DateTime>, IUtf8SpanFormattable, System::Runtime::Serialization::ISerializable
public value class DateTime : IComparable, IConvertible, IFormattable
public value class DateTime : IComparable, IComparable<DateTime>, IEquatable<DateTime>, IFormattable
public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, ISpanFormattable, System.Runtime.Serialization.ISerializable
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IParsable<DateTime>, ISpanFormattable, ISpanParsable<DateTime>, System.Runtime.Serialization.ISerializable
public readonly struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IParsable<DateTime>, ISpanFormattable, ISpanParsable<DateTime>, IUtf8SpanFormattable, System.Runtime.Serialization.ISerializable
public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
[System.Serializable]
public struct DateTime : IComparable, IConvertible, IFormattable
[System.Serializable]
public struct DateTime : IComparable, IComparable<DateTime>, IConvertible, IEquatable<DateTime>, IFormattable, System.Runtime.Serialization.ISerializable
public struct DateTime : IComparable, IComparable<DateTime>, IEquatable<DateTime>, IFormattable
type DateTime = struct
    interface IConvertible
    interface IFormattable
type DateTime = struct
    interface IConvertible
    interface IFormattable
    interface ISerializable
type DateTime = struct
    interface IConvertible
    interface ISpanFormattable
    interface IFormattable
    interface ISerializable
type DateTime = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<DateTime>
    interface ISpanFormattable
    interface ISpanParsable<DateTime>
    interface ISerializable
type DateTime = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<DateTime>
    interface ISpanFormattable
    interface ISpanParsable<DateTime>
    interface ISerializable
    interface IUtf8SpanFormattable
[<System.Serializable>]
type DateTime = struct
    interface IFormattable
    interface IConvertible
[<System.Serializable>]
type DateTime = struct
    interface IFormattable
    interface IConvertible
    interface ISerializable
type DateTime = struct
    interface IFormattable
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IConvertible, IEquatable(Of DateTime), IFormattable
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IConvertible, IEquatable(Of DateTime), IFormattable, ISerializable
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IConvertible, IEquatable(Of DateTime), ISerializable, ISpanFormattable
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IConvertible, IEquatable(Of DateTime), IParsable(Of DateTime), ISerializable, ISpanFormattable, ISpanParsable(Of DateTime)
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IConvertible, IEquatable(Of DateTime), IParsable(Of DateTime), ISerializable, ISpanFormattable, ISpanParsable(Of DateTime), IUtf8SpanFormattable
Public Structure DateTime
Implements IComparable, IConvertible, IFormattable
Public Structure DateTime
Implements IComparable, IComparable(Of DateTime), IEquatable(Of DateTime), IFormattable
Warisan
DateTime
Atribut
Penerapan

Keterangan

Penting

Era dalam kalender Jepang didasarkan pada pemerintahan kaisar dan karenanya diharapkan berubah. Misalnya, 1 Mei 2019 menandai awal era Reiwa di JapaneseCalendar dan JapaneseLunisolarCalendar. Perubahan era seperti itu mempengaruhi semua aplikasi yang menggunakan kalender ini. Untuk informasi selengkapnya dan untuk menentukan apakah aplikasi Anda terpengaruh, lihat Menangani era baru di kalender Jepang di .NET. Untuk informasi tentang menguji aplikasi Anda pada sistem Windows untuk memastikan kesiapannya untuk perubahan era, lihat Menyiapkan aplikasi Anda untuk perubahan era Jepang. Untuk fitur di .NET yang mendukung kalender dengan beberapa era dan untuk praktik terbaik saat bekerja dengan kalender yang mendukung beberapa era, lihat Bekerja dengan era.

Catatan

Beberapa contoh C# dalam artikel ini berjalan di Try.NET runner kode sebaris dan taman bermain. Pilih tombol Jalankan untuk menjalankan contoh di jendela interaktif. Setelah Anda menjalankan kode, Anda dapat memodifikasinya dan menjalankan kode yang dimodifikasi dengan memilih Jalankan lagi. Kode yang dimodifikasi berjalan di jendela interaktif atau, jika kompilasi gagal, jendela interaktif menampilkan semua pesan kesalahan pengompilasi C#.

Zona waktu lokal dari pengeksekusi dan playground code sebaris Try.NET adalah Waktu Universal Terkoordinasi, atau UTC. Hal ini dapat memengaruhi perilaku dan output contoh yang mengilustrasikan jenis DateTime, DateTimeOffset, dan TimeZoneInfo serta anggotanya.

Artikel ini menyertakan beberapa contoh yang menggunakan DateTime jenis :

Contoh Inisialisasi

DateTime Memformat objek sebagai string

Mengurai string sebagai DateTime objek

DateTime Resolusi

Budaya dan kalender

Persistensi

Bagian ini berisi topik untuk banyak penggunaan DateTime umum struct:

Jenis DateTime nilai mewakili tanggal dan waktu dengan nilai mulai dari 00:00:00 (tengah malam), 1 Januari 0001 Anno Domini (Era Umum) hingga 11:59:59 P.M., 31 Desember 9999 A.D. (C.E.) di kalender Gregorian.

Nilai waktu diukur dalam unit 100 nanodetik yang disebut tick. Tanggal tertentu adalah jumlah kutu sejak 12:00 tengah malam, 1 Januari 0001 A.D. (C.E.) di GregorianCalendar kalender. Angka tersebut mengecualikan tanda centang yang akan ditambahkan dengan detik lompatan. Misalnya, nilai ticks 3124137600000000L menunjukkan tanggal Jumat, 01 Januari 0100 12:00:00 tengah malam. Nilai DateTime selalu dinyatakan dalam konteks kalender eksplisit atau default.

Catatan

Jika Anda bekerja dengan nilai centang yang ingin Anda konversi ke interval waktu lain, seperti menit atau detik, Anda harus menggunakan TimeSpan.TicksPerDay, , TimeSpan.TicksPerHourTimeSpan.TicksPerMinute, TimeSpan.TicksPerSecond, atau TimeSpan.TicksPerMillisecond konstanta untuk melakukan konversi. Misalnya, untuk menambahkan jumlah detik yang diwakili oleh jumlah tanda centang tertentu ke Second komponen DateTime nilai, Anda dapat menggunakan ekspresi dateValue.Second + nTicks/Timespan.TicksPerSecond.

Anda dapat melihat sumber untuk seluruh set contoh dari artikel ini baik di Visual Basic, F#, atau C# dari repositori dokumen di GitHub.

Catatan

Alternatif untuk DateTime struktur untuk bekerja dengan nilai tanggal dan waktu di zona waktu tertentu adalah strukturnya DateTimeOffset . Struktur DateTimeOffset menyimpan informasi tanggal dan waktu di bidang privat DateTime dan jumlah menit di mana tanggal dan waktu tersebut berbeda dari UTC di bidang privat Int16 . Ini memungkinkan nilai untuk DateTimeOffset mencerminkan waktu di zona waktu tertentu, sedangkan DateTime nilai dapat secara tidak ambigu hanya mencerminkan UTC dan waktu zona waktu lokal. Untuk diskusi tentang kapan menggunakan struktur atau DateTimeOffset struktur saat bekerja dengan nilai tanggal dan waktu, lihat Memilih Antara DateTime, DateTimeOffset, TimeSpan, dan TimeZoneInfo.DateTime

Menginisialisasi objek DateTime

Anda dapat menetapkan nilai awal ke nilai baru DateTime dengan berbagai cara:

  • Memanggil konstruktor, baik di mana Anda menentukan argumen untuk nilai, atau menggunakan konstruktor tanpa parameter implisit.
  • Menetapkan DateTime ke nilai yang dikembalikan dari properti atau metode.
  • Mengurai DateTime nilai dari representasi stringnya.
  • Menggunakan fitur bahasa khusus Visual Basic untuk membuat instans DateTime.

Cuplikan kode berikut menunjukkan contoh masing-masing.

Memanggil konstruktor

Anda memanggil salah satu kelebihan beban DateTime konstruktor yang menentukan elemen nilai tanggal dan waktu (seperti tahun, bulan, dan hari, atau jumlah tanda centang). Kode berikut membuat tanggal tertentu menggunakan DateTime konstruktor yang menentukan tahun, bulan, hari, jam, menit, dan detik.

Dim date1 As New Date(2008, 5, 1, 8, 30, 52)
var date1 = new DateTime(2008, 5, 1, 8, 30, 52);
Console.WriteLine(date1);
let date1 = DateTime(2008, 5, 1, 8, 30, 52)
printfn $"{date1}"

Anda memanggil DateTime konstruktor tanpa parameter implisit struktur saat Anda ingin menginisialisasi DateTime ke nilai defaultnya. (Untuk detail tentang konstruktor tanpa parameter implisit dari jenis nilai, lihat Jenis Nilai.) Beberapa kompilator juga mendukung mendeklarasikan DateTime nilai tanpa secara eksplisit menetapkan nilai ke nilai tersebut. Membuat nilai tanpa inisialisasi eksplisit juga menghasilkan nilai default. Contoh berikut mengilustrasikan DateTime konstruktor tanpa parameter implisit dalam C# dan Visual Basic, serta DateTime deklarasi tanpa penugasan di Visual Basic.

Dim dat1 As DateTime
' The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat1.ToString(System.Globalization.CultureInfo.InvariantCulture))
' The following method call displays True.
Console.WriteLine(dat1.Equals(Date.MinValue))

Dim dat2 As New DateTime()
' The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat2.ToString(System.Globalization.CultureInfo.InvariantCulture))
' The following method call displays True.
Console.WriteLine(dat2.Equals(Date.MinValue))
var dat1 = new DateTime();
// The following method call displays 1/1/0001 12:00:00 AM.
Console.WriteLine(dat1.ToString(System.Globalization.CultureInfo.InvariantCulture));
// The following method call displays True.
Console.WriteLine(dat1.Equals(DateTime.MinValue));
let dat1 = DateTime()

// The following method call displays 1/1/0001 12:00:00 AM.
printfn $"{dat1.ToString System.Globalization.CultureInfo.InvariantCulture}"

// The following method call displays True.
printfn $"{dat1.Equals DateTime.MinValue}"
Menetapkan nilai komputasi

Anda dapat menetapkan objek nilai DateTime tanggal dan waktu yang dikembalikan oleh properti atau metode. Contoh berikut menetapkan tanggal dan waktu saat ini, tanggal dan waktu Waktu Universal Terkoordinasi (UTC) saat ini, dan tanggal dan waktu saat ini ke tiga variabel baru DateTime .

Dim date1 As Date = Date.Now
Dim date2 As Date = Date.UtcNow
Dim date3 As Date = Date.Today
DateTime date1 = DateTime.Now;
DateTime date2 = DateTime.UtcNow;
DateTime date3 = DateTime.Today;
let date1 = DateTime.Now
let date2 = DateTime.UtcNow
let date3 = DateTime.Today
Mengurai string yang mewakili DateTime

Metode Parse, ParseExact, TryParse, dan TryParseExact semuanya mengonversi string ke nilai tanggal dan waktu yang setara. Contoh berikut menggunakan Parse metode dan ParseExact untuk mengurai string dan mengonversinya menjadi DateTime nilai. Format kedua menggunakan formulir yang didukung oleh standar ISO 8601 untuk tanggal dan waktu yang mewakili dalam format string. Representasi standar ini sering digunakan untuk mentransfer informasi tanggal di layanan web.

Dim dateString As String = "5/1/2008 8:30:52 AM"
Dim date1 As Date = Date.Parse(dateString,
                       System.Globalization.CultureInfo.InvariantCulture)
Dim iso8601String As String = "20080501T08:30:52Z"
Dim dateISO8602 As Date = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ",
                              System.Globalization.CultureInfo.InvariantCulture)
Console.WriteLine(dateISO8602)
var dateString = "5/1/2008 8:30:52 AM";
DateTime date1 = DateTime.Parse(dateString,
                          System.Globalization.CultureInfo.InvariantCulture);
var iso8601String = "20080501T08:30:52Z";
DateTime dateISO8602 = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ",
                                System.Globalization.CultureInfo.InvariantCulture);
let dateString = "5/1/2008 8:30:52 AM"
let date1 = DateTime.Parse(dateString, System.Globalization.CultureInfo.InvariantCulture)
let iso8601String = "20080501T08:30:52Z"
let dateISO8602 = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture)

Metode TryParse dan TryParseExact menunjukkan apakah string adalah representasi nilai yang DateTime valid dan, jika ya, melakukan konversi.

Sintaksis khusus bahasa untuk Visual Basic

Pernyataan Visual Basic berikut menginisialisasi nilai baru DateTime .

Dim date1 As Date = #5/1/2008 8:30:52AM#

Nilai DateTime dan representasi stringnya

Secara internal, semua DateTime nilai dinyatakan sebagai jumlah tanda centang (jumlah interval 100 nanodetik) yang telah berlalu sejak 12:00:00 tengah malam, 1 Januari 0001. Nilai aktual DateTime tidak bergantung pada cara nilai tersebut muncul saat ditampilkan. Tampilan DateTime nilai adalah hasil dari operasi pemformatan yang mengonversi nilai ke representasi stringnya.

Munculnya nilai tanggal dan waktu tergantung pada budaya, standar internasional, persyaratan aplikasi, dan preferensi pribadi. Struktur menawarkan DateTime fleksibilitas dalam memformat nilai tanggal dan waktu melalui kelebihan beban ToString. Metode default DateTime.ToString() mengembalikan representasi string dari nilai tanggal dan waktu menggunakan pola tanggal pendek dan waktu panjang budaya saat ini. Contoh berikut menggunakan metode default DateTime.ToString() . Ini menampilkan tanggal dan waktu menggunakan pola tanggal pendek dan waktu yang lama untuk budaya saat ini. Budaya en-US adalah budaya saat ini di komputer tempat contoh dijalankan.

var date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString());
// For en-US culture, displays 3/1/2008 7:00:00 AM
let date1 = DateTime(2008, 3, 1, 7, 0, 0)
printfn $"{date1.ToString()}"
// For en-US culture, displays 3/1/2008 7:00:00 AM
Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString())
' For en-US culture, displays 3/1/2008 7:00:00 AM

Anda mungkin perlu memformat tanggal dalam budaya tertentu untuk mendukung skenario web di mana server mungkin berada dalam budaya yang berbeda dari klien. Anda menentukan budaya menggunakan DateTime.ToString(IFormatProvider) metode untuk membuat representasi tanggal pendek dan waktu yang lama dalam budaya tertentu. Contoh berikut menggunakan DateTime.ToString(IFormatProvider) metode untuk menampilkan tanggal dan waktu menggunakan tanggal dan pola waktu singkat untuk budaya fr-FR.

var date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 01/03/2008 07:00:00
let date1 = DateTime(2008, 3, 1, 7, 0, 0)
printfn $"""{date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture "fr-FR")}"""
// Displays 01/03/2008 07:00:00
Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 01/03/2008 07:00:00

Aplikasi lain mungkin memerlukan representasi string yang berbeda dari tanggal. Metode mengembalikan DateTime.ToString(String) representasi string yang ditentukan oleh penentu format standar atau kustom menggunakan konvensi pemformatan budaya saat ini. Contoh berikut menggunakan DateTime.ToString(String) metode untuk menampilkan pola tanggal dan waktu penuh untuk budaya en-US, budaya saat ini di komputer tempat contoh dijalankan.

var date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F"));
// Displays Saturday, March 01, 2008 7:00:00 AM
let date1 = DateTime(2008, 3, 1, 7, 0, 0)
printfn $"""{date1.ToString "F"}"""
// Displays Saturday, March 01, 2008 7:00:00 AM
Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString("F"))
' Displays Saturday, March 01, 2008 7:00:00 AM

Terakhir, Anda dapat menentukan budaya dan format menggunakan metode .DateTime.ToString(String, IFormatProvider) Contoh berikut menggunakan DateTime.ToString(String, IFormatProvider) metode untuk menampilkan pola tanggal dan waktu penuh untuk budaya fr-FR.

var date1 = new DateTime(2008, 3, 1, 7, 0, 0);
Console.WriteLine(date1.ToString("F", new System.Globalization.CultureInfo("fr-FR")));
// Displays samedi 1 mars 2008 07:00:00
let date1 = DateTime(2008, 3, 1, 7, 0, 0)
printfn $"""{date1.ToString("F", new System.Globalization.CultureInfo "fr-FR")}"""
// Displays samedi 1 mars 2008 07:00:00
Dim date1 As Date = #3/1/2008 7:00AM#
Console.WriteLine(date1.ToString("F", New System.Globalization.CultureInfo("fr-FR")))
' Displays samedi 1 mars 2008 07:00:00

Kelebihan DateTime.ToString(String) beban juga dapat digunakan dengan string format kustom untuk menentukan format lain. Contoh berikut menunjukkan cara memformat string menggunakan format standar ISO 8601 yang sering digunakan untuk layanan web. Format Iso 8601 tidak memiliki string format standar yang sesuai.

var date1 = new DateTime(2008, 3, 1, 7, 0, 0, DateTimeKind.Utc);
Console.WriteLine(date1.ToString("yyyy-MM-ddTHH:mm:sszzz", System.Globalization.CultureInfo.InvariantCulture));
// Displays 2008-03-01T07:00:00+00:00
let date1 = DateTime(2008, 3, 1, 7, 0, 0, DateTimeKind.Utc)
printfn $"""{date1.ToString("yyyy-MM-ddTHH:mm:sszzz", System.Globalization.CultureInfo.InvariantCulture)}"""
// Displays 2008-03-01T07:00:00+00:00
Dim date1 As DateTime = New DateTime(2008, 3, 1, 7, 0, 0, DateTimeKind.Utc)
Console.WriteLine(date1.ToString("yyyy-MM-ddTHH:mm:sszzz", System.Globalization.CultureInfo.InvariantCulture))
' Displays 2008-03-01T07:00:00+00:00

Untuk informasi selengkapnya tentang nilai pemformatan DateTime , lihat String Format Tanggal dan Waktu Standar dan String Format Tanggal dan Waktu Kustom.

Mengurai nilai DateTime dari string

Penguraian mengonversi representasi string tanggal dan waktu menjadi DateTime nilai. Biasanya, string tanggal dan waktu memiliki dua penggunaan yang berbeda dalam aplikasi:

  • Tanggal dan waktu membutuhkan berbagai bentuk dan mencerminkan konvensi budaya saat ini atau budaya tertentu. Misalnya, aplikasi memungkinkan pengguna yang budayanya saat ini en-US untuk memasukkan nilai tanggal sebagai "15/12/2013" atau "15 Desember 2013". Ini memungkinkan pengguna yang budayanya saat ini en-gb untuk memasukkan nilai tanggal sebagai "15/12/2013" atau "15 Desember 2013."

  • Tanggal dan waktu diwakili dalam format yang telah ditentukan sebelumnya. Misalnya, aplikasi menserialisasikan tanggal sebagai "20130103" secara independen dari budaya tempat aplikasi berjalan. Aplikasi mungkin memerlukan tanggal input dalam format tanggal pendek budaya saat ini.

Anda menggunakan Parse metode atau TryParse untuk mengonversi string dari salah satu format tanggal dan waktu umum yang digunakan oleh budaya menjadi DateTime nilai. Contoh berikut menunjukkan bagaimana Anda dapat menggunakan TryParse untuk mengonversi string tanggal dalam format khusus budaya yang berbeda menjadi DateTime nilai. Ini mengubah budaya saat ini menjadi Bahasa Inggris (Inggris Raya) dan memanggil GetDateTimeFormats() metode untuk menghasilkan array string tanggal dan waktu. Kemudian meneruskan setiap elemen dalam array ke TryParse metode . Output dari contoh menunjukkan metode penguraian berhasil mengonversi setiap string tanggal dan waktu khusus budaya.

System.Threading.Thread.CurrentThread.CurrentCulture =
    System.Globalization.CultureInfo.CreateSpecificCulture("en-GB");

var date1 = new DateTime(2013, 6, 1, 12, 32, 30);
var badFormats = new List<String>();

Console.WriteLine($"{"Date String",-37} {"Date",-19}\n");
foreach (var dateString in date1.GetDateTimeFormats())
{
    DateTime parsedDate;
    if (DateTime.TryParse(dateString, out parsedDate))
        Console.WriteLine($"{dateString,-37} {DateTime.Parse(dateString),-19}");
    else
        badFormats.Add(dateString);
}

// Display strings that could not be parsed.
if (badFormats.Count > 0)
{
    Console.WriteLine("\nStrings that could not be parsed: ");
    foreach (var badFormat in badFormats)
        Console.WriteLine($"   {badFormat}");
}
// Press "Run" to see the output.
System.Threading.Thread.CurrentThread.CurrentCulture <-
    System.Globalization.CultureInfo.CreateSpecificCulture "en-GB"

let date1 = DateTime(2013, 6, 1, 12, 32, 30)
let badFormats = ResizeArray<String>()

printfn "%-37s %-19s\n" "Date String" "Date"
for dateString in date1.GetDateTimeFormats() do
    match DateTime.TryParse dateString with
    | true, parsedDate ->
        printfn $"%-37s{dateString} %-19O{parsedDate}\n" 
    | _ ->
        badFormats.Add dateString

// Display strings that could not be parsed.
if badFormats.Count > 0 then
    printfn "\nStrings that could not be parsed: "
    for badFormat in badFormats do
        printfn $"   {badFormat}"
// Press "Run" to see the output.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB")

Dim date1 As New DateTime(2013, 6, 1, 12, 32, 30)
Dim badFormats As New List(Of String)

Console.WriteLine($"{"Date String",-37} {"Date",-19}")
Console.WriteLine()
For Each dateString As String In date1.GetDateTimeFormats()
    Dim parsedDate As DateTime
    If DateTime.TryParse(dateString, parsedDate) Then
        Console.WriteLine($"{dateString,-37} {DateTime.Parse(dateString),-19:g}")
    Else
        badFormats.Add(dateString)
    End If
Next

' Display strings that could not be parsed.
If badFormats.Count > 0 Then
    Console.WriteLine()
    Console.WriteLine("Strings that could not be parsed: ")
    For Each badFormat In badFormats
        Console.WriteLine($"   {badFormat}")
    Next
End If
' The example displays the following output:
'       Date String                           Date               
'       
'       01/06/2013                            01/06/2013 00:00:00
'       01/06/13                              01/06/2013 00:00:00
'       1/6/13                                01/06/2013 00:00:00
'       1.6.13                                01/06/2013 00:00:00
'       2013-06-01                            01/06/2013 00:00:00
'       01 June 2013                          01/06/2013 00:00:00
'       1 June 2013                           01/06/2013 00:00:00
'       01 June 2013 12:32                    01/06/2013 12:32:00
'       01 June 2013 12:32                    01/06/2013 12:32:00
'       01 June 2013 12:32 PM                 01/06/2013 12:32:00
'       01 June 2013 12:32 PM                 01/06/2013 12:32:00
'       1 June 2013 12:32                     01/06/2013 12:32:00
'       1 June 2013 12:32                     01/06/2013 12:32:00
'       1 June 2013 12:32 PM                  01/06/2013 12:32:00
'       1 June 2013 12:32 PM                  01/06/2013 12:32:00
'       01 June 2013 12:32:30                 01/06/2013 12:32:30
'       01 June 2013 12:32:30                 01/06/2013 12:32:30
'       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
'       01 June 2013 12:32:30 PM              01/06/2013 12:32:30
'       1 June 2013 12:32:30                  01/06/2013 12:32:30
'       1 June 2013 12:32:30                  01/06/2013 12:32:30
'       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
'       1 June 2013 12:32:30 PM               01/06/2013 12:32:30
'       01/06/2013 12:32                      01/06/2013 12:32:00
'       01/06/2013 12:32                      01/06/2013 12:32:00
'       01/06/2013 12:32 PM                   01/06/2013 12:32:00
'       01/06/2013 12:32 PM                   01/06/2013 12:32:00
'       01/06/13 12:32                        01/06/2013 12:32:00
'       01/06/13 12:32                        01/06/2013 12:32:00
'       01/06/13 12:32 PM                     01/06/2013 12:32:00
'       01/06/13 12:32 PM                     01/06/2013 12:32:00
'       1/6/13 12:32                          01/06/2013 12:32:00
'       1/6/13 12:32                          01/06/2013 12:32:00
'       1/6/13 12:32 PM                       01/06/2013 12:32:00
'       1/6/13 12:32 PM                       01/06/2013 12:32:00
'       1.6.13 12:32                          01/06/2013 12:32:00
'       1.6.13 12:32                          01/06/2013 12:32:00
'       1.6.13 12:32 PM                       01/06/2013 12:32:00
'       1.6.13 12:32 PM                       01/06/2013 12:32:00
'       2013-06-01 12:32                      01/06/2013 12:32:00
'       2013-06-01 12:32                      01/06/2013 12:32:00
'       2013-06-01 12:32 PM                   01/06/2013 12:32:00
'       2013-06-01 12:32 PM                   01/06/2013 12:32:00
'       01/06/2013 12:32:30                   01/06/2013 12:32:30
'       01/06/2013 12:32:30                   01/06/2013 12:32:30
'       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
'       01/06/2013 12:32:30 PM                01/06/2013 12:32:30
'       01/06/13 12:32:30                     01/06/2013 12:32:30
'       01/06/13 12:32:30                     01/06/2013 12:32:30
'       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
'       01/06/13 12:32:30 PM                  01/06/2013 12:32:30
'       1/6/13 12:32:30                       01/06/2013 12:32:30
'       1/6/13 12:32:30                       01/06/2013 12:32:30
'       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
'       1/6/13 12:32:30 PM                    01/06/2013 12:32:30
'       1.6.13 12:32:30                       01/06/2013 12:32:30
'       1.6.13 12:32:30                       01/06/2013 12:32:30
'       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
'       1.6.13 12:32:30 PM                    01/06/2013 12:32:30
'       2013-06-01 12:32:30                   01/06/2013 12:32:30
'       2013-06-01 12:32:30                   01/06/2013 12:32:30
'       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
'       2013-06-01 12:32:30 PM                01/06/2013 12:32:30
'       01 June                               01/06/2013 00:00:00
'       01 June                               01/06/2013 00:00:00
'       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
'       2013-06-01T12:32:30.0000000           01/06/2013 12:32:30
'       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
'       Sat, 01 Jun 2013 12:32:30 GMT         01/06/2013 05:32:30
'       2013-06-01T12:32:30                   01/06/2013 12:32:30
'       12:32                                 22/04/2013 12:32:00
'       12:32                                 22/04/2013 12:32:00
'       12:32 PM                              22/04/2013 12:32:00
'       12:32 PM                              22/04/2013 12:32:00
'       12:32:30                              22/04/2013 12:32:30
'       12:32:30                              22/04/2013 12:32:30
'       12:32:30 PM                           22/04/2013 12:32:30
'       12:32:30 PM                           22/04/2013 12:32:30
'       2013-06-01 12:32:30Z                  01/06/2013 05:32:30
'       01 June 2013 19:32:30                 01/06/2013 19:32:30
'       01 June 2013 19:32:30                 01/06/2013 19:32:30
'       01 June 2013 07:32:30 PM              01/06/2013 19:32:30
'       01 June 2013 7:32:30 PM               01/06/2013 19:32:30
'       1 June 2013 19:32:30                  01/06/2013 19:32:30
'       1 June 2013 19:32:30                  01/06/2013 19:32:30
'       1 June 2013 07:32:30 PM               01/06/2013 19:32:30
'       1 June 2013 7:32:30 PM                01/06/2013 19:32:30
'       June 2013                             01/06/2013 00:00:00
'       June 2013                             01/06/2013 00:00:00

Anda menggunakan ParseExact metode dan TryParseExact untuk mengonversi string yang harus cocok dengan format atau format tertentu ke DateTime nilai. Anda menentukan satu atau beberapa string format tanggal dan waktu sebagai parameter untuk metode penguraian. Contoh berikut menggunakan TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime) metode untuk mengonversi string yang harus dalam format "yyyyMMdd" atau format "HHmmss" ke DateTime nilai.

string[] formats = { "yyyyMMdd", "HHmmss" };
string[] dateStrings = { "20130816", "20131608", "  20130816   ",
                   "115216", "521116", "  115216  " };
DateTime parsedDate;

foreach (var dateString in dateStrings)
{
    if (DateTime.TryParseExact(dateString, formats, null,
                               System.Globalization.DateTimeStyles.AllowWhiteSpaces |
                               System.Globalization.DateTimeStyles.AdjustToUniversal,
                               out parsedDate))
        Console.WriteLine($"{dateString} --> {parsedDate:g}");
    else
        Console.WriteLine($"Cannot convert {dateString}");
}
// The example displays the following output:
//       20130816 --> 8/16/2013 12:00 AM
//       Cannot convert 20131608
//         20130816    --> 8/16/2013 12:00 AM
//       115216 --> 4/22/2013 11:52 AM
//       Cannot convert 521116
//         115216   --> 4/22/2013 11:52 AM
let formats = [| "yyyyMMdd"; "HHmmss" |]
let dateStrings = 
    [ "20130816"; "20131608"; "  20130816   "
      "115216"; "521116"; "  115216  " ]

for dateString in dateStrings do
    match DateTime.TryParseExact(dateString, formats, null,
                                System.Globalization.DateTimeStyles.AllowWhiteSpaces |||
                                System.Globalization.DateTimeStyles.AdjustToUniversal) with
    | true, parsedDate ->
        printfn $"{dateString} --> {parsedDate:g}"
    | _ ->
        printfn $"Cannot convert {dateString}"

// The example displays the following output:
//       20130816 --> 8/16/2013 12:00 AM
//       Cannot convert 20131608
//         20130816    --> 8/16/2013 12:00 AM
//       115216 --> 4/22/2013 11:52 AM
//       Cannot convert 521116
//         115216   --> 4/22/2013 11:52 AM
Dim formats() As String = {"yyyyMMdd", "HHmmss"}
Dim dateStrings() As String = {"20130816", "20131608",
                              "  20130816   ", "115216",
                              "521116", "  115216  "}
Dim parsedDate As DateTime

For Each dateString As String In dateStrings
    If DateTime.TryParseExact(dateString, formats, Nothing,
                           DateTimeStyles.AllowWhiteSpaces Or
                           DateTimeStyles.AdjustToUniversal,
                           parsedDate) Then
        Console.WriteLine($"{dateString} --> {parsedDate:g}")
    Else
        Console.WriteLine($"Cannot convert {dateString}")
    End If
Next
' The example displays the following output:
'       20130816 --> 8/16/2013 12:00 AM
'       Cannot convert 20131608
'         20130816    --> 8/16/2013 12:00 AM
'       115216 --> 4/22/2013 11:52 AM
'       Cannot convert 521116
'         115216   --> 4/22/2013 11:52 AM

Salah satu penggunaan umum untuk ParseExact adalah mengonversi representasi string dari layanan web, biasanya dalam format standar ISO 8601 . Kode berikut menunjukkan string format yang benar untuk digunakan:

var iso8601String = "20080501T08:30:52Z";
DateTime dateISO8602 = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ",
    System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine($"{iso8601String} --> {dateISO8602:g}");
let iso8601String = "20080501T08:30:52Z"
let dateISO8602 = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ", System.Globalization.CultureInfo.InvariantCulture)

printfn $"{iso8601String} --> {dateISO8602:g}"
Dim iso8601String As String = "20080501T08:30:52Z"
Dim dateISO8602 As DateTime = DateTime.ParseExact(iso8601String, "yyyyMMddTHH:mm:ssZ", CultureInfo.InvariantCulture)
Console.WriteLine($"{iso8601String} --> {dateISO8602:g}")

Jika string tidak dapat diurai, Parse metode dan ParseExact melemparkan pengecualian. Metode TryParse dan TryParseExact mengembalikan Boolean nilai yang menunjukkan apakah konversi berhasil atau gagal. Anda harus menggunakan TryParse metode atau TryParseExact dalam skenario di mana performa penting. Operasi penguraian untuk string tanggal dan waktu cenderung memiliki tingkat kegagalan yang tinggi, dan penanganan pengecualian mahal. Gunakan metode ini jika string diinput oleh pengguna atau berasal dari sumber yang tidak diketahui.

Untuk informasi selengkapnya tentang mengurai nilai tanggal dan waktu, lihat Mengurai String Tanggal dan Waktu.

Nilai DateTime

Deskripsi nilai waktu dalam jenis sering diekspresikan DateTime menggunakan standar Waktu Universal Terkoordinasi (UTC). Waktu Universal Terkoordinasi adalah nama yang diakui secara internasional untuk Greenwich Mean Time (GMT). Waktu Universal Terkoordinasi adalah waktu seperti yang diukur pada bujur nol derajat, titik asal UTC. Waktu musim panas tidak berlaku untuk UTC.

Waktu lokal relatif terhadap zona waktu tertentu. Zona waktu dikaitkan dengan offset zona waktu. Offset zona waktu adalah perpindahan zona waktu yang diukur dalam jam dari titik asal UTC. Selain itu, waktu lokal secara opsional dipengaruhi oleh waktu musim panas, yang menambahkan atau mengurangi penyesuaian interval waktu. Waktu lokal dihitung dengan menambahkan offset zona waktu ke UTC dan menyesuaikan waktu musim panas jika perlu. Offset zona waktu pada titik asal UTC adalah nol.

Waktu UTC cocok untuk perhitungan, perbandingan, dan penyimpanan tanggal dan waktu dalam file. Waktu lokal sesuai untuk ditampilkan di antarmuka pengguna aplikasi desktop. Aplikasi yang sadar zona waktu (seperti banyak aplikasi Web) juga perlu bekerja dengan sejumlah zona waktu lainnya.

Kind Jika properti objek DateTime adalah DateTimeKind.Unspecified, itu tidak ditentukan apakah waktu yang diwakili adalah waktu lokal, waktu UTC, atau waktu di beberapa zona waktu lainnya.

Resolusi DateTime

Catatan

Sebagai alternatif untuk melakukan aritmatika tanggal dan waktu pada DateTime nilai untuk mengukur waktu yang berlalu, Anda dapat menggunakan Stopwatch kelas .

Properti Ticks mengekspresikan nilai tanggal dan waktu dalam satuan sepuluh juta detik. Properti Millisecond mengembalikan seribu detik dalam nilai tanggal dan waktu. Menggunakan panggilan berulang ke DateTime.Now properti untuk mengukur waktu yang berlalu tergantung pada jam sistem. Jam sistem pada sistem Windows 7 dan Windows 8 memiliki resolusi sekitar 15 milidetik. Resolusi ini memengaruhi interval waktu kecil kurang dari 100 milidetik.

Contoh berikut mengilustrasikan dependensi nilai tanggal dan waktu saat ini pada resolusi jam sistem. Dalam contoh, perulangan luar berulang 20 kali, dan perulangan dalam berfungsi untuk menunda perulangan luar. Jika nilai penghitung perulangan luar adalah 10, panggilan ke Thread.Sleep metode memperkenalkan penundaan lima milidetik. Contoh berikut menunjukkan jumlah milidetik yang dikembalikan oleh DateTime.Now.Milliseconds properti berubah hanya setelah panggilan ke Thread.Sleep.

string output = "";
for (int ctr = 0; ctr <= 20; ctr++)
{
    output += String.Format($"{DateTime.Now.Millisecond}\n");
    // Introduce a delay loop.
    for (int delay = 0; delay <= 1000; delay++)
    { }

    if (ctr == 10)
    {
        output += "Thread.Sleep called...\n";
        System.Threading.Thread.Sleep(5);
    }
}
Console.WriteLine(output);
// Press "Run" to see the output.
let mutable output = ""
for i = 0 to 20 do
    output <- output + $"{DateTime.Now.Millisecond}\n"
    // Introduce a delay loop.
    for _ = 0 to 1000 do ()

    if i = 10 then
        output <- output + "Thread.Sleep called...\n"
        System.Threading.Thread.Sleep 5

printfn $"{output}"
// Press "Run" to see the output.
Dim output As String = ""
For ctr As Integer = 0 To 20
    output += Date.Now.Millisecond.ToString() + vbCrLf
    ' Introduce a delay loop.
    For delay As Integer = 0 To 1000
    Next

    If ctr = 10 Then
        output += "Thread.Sleep called..." + vbCrLf
        Thread.Sleep(5)
    End If
Next
Console.WriteLine(output)
' The example displays output like the following:
'       111
'       111
'       111
'       111
'       111
'       111
'       111
'       111
'       111
'       111
'       111
'       Thread.Sleep called...
'       143
'       143
'       143
'       143
'       143
'       143
'       143
'       143
'       143
'       143

Operasi DateTime

Perhitungan menggunakan DateTime struktur, seperti Add atau Subtract, tidak mengubah nilai struktur. Sebaliknya, perhitungan mengembalikan struktur baru DateTime yang nilainya adalah hasil penghitungan.

Operasi konversi antara zona waktu (seperti antara UTC dan waktu setempat, atau antara satu zona waktu dan zona waktu lainnya) membutuhkan waktu musim panas, tetapi operasi aritmatika dan perbandingan tidak.

Struktur itu DateTime sendiri menawarkan dukungan terbatas untuk mengonversi dari satu zona waktu ke zona lain. Anda dapat menggunakan ToLocalTime metode untuk mengonversi UTC ke waktu lokal, atau Anda dapat menggunakan ToUniversalTime metode untuk mengonversi dari waktu lokal ke UTC. Namun, serangkaian metode konversi zona waktu lengkap tersedia di TimeZoneInfo kelas . Anda mengonversi waktu di salah satu zona waktu dunia ke waktu di zona waktu lain menggunakan metode ini.

Perhitungan dan perbandingan DateTime objek bermakna hanya jika objek mewakili waktu dalam zona waktu yang sama. Anda dapat menggunakan TimeZoneInfo objek untuk mewakili DateTime zona waktu nilai, meskipun keduanya digabungkan secara longgar. Objek DateTime tidak memiliki properti yang mengembalikan objek yang mewakili zona waktu nilai tanggal dan waktu tersebut. Properti Kind menunjukkan apakah DateTime mewakili UTC, waktu lokal, atau tidak ditentukan. Dalam aplikasi yang sadar zona waktu, Anda harus mengandalkan beberapa mekanisme eksternal untuk menentukan zona waktu tempat DateTime objek dibuat. Anda dapat menggunakan struktur yang membungkus DateTime nilai dan TimeZoneInfo objek yang mewakili DateTime zona waktu nilai. Untuk detail tentang menggunakan UTC dalam perhitungan dan perbandingan dengan DateTime nilai, lihat Melakukan Operasi Aritmatika dengan Tanggal dan Waktu.

Setiap DateTime anggota secara implisit menggunakan kalender Gregorian untuk melakukan operasinya. Pengecualian adalah metode yang secara implisit menentukan kalender. Ini termasuk konstruktor yang menentukan kalender, dan metode dengan parameter yang berasal dari IFormatProvider, seperti System.Globalization.DateTimeFormatInfo.

Operasi oleh anggota jenis DateTime mempertimbangkan detail seperti tahun kabut dan jumlah hari dalam sebulan.

Nilai dan kalender DateTime

Pustaka Kelas .NET mencakup sejumlah kelas kalender, yang semuanya berasal dari Calendar kelas . Topologi tersebut adalah:

Penting

Era di kalender Jepang didasarkan pada pemerintahan kaisar dan karenanya diharapkan berubah. Misalnya, 1 Mei 2019 menandai awal era Reiwa di JapaneseCalendar dan JapaneseLunisolarCalendar. Perubahan era seperti itu mempengaruhi semua aplikasi yang menggunakan kalender ini. Untuk informasi selengkapnya dan untuk menentukan apakah aplikasi Anda terpengaruh, lihat Menangani era baru di kalender Jepang di .NET. Untuk informasi tentang menguji aplikasi Anda pada sistem Windows untuk memastikan kesiapannya untuk perubahan era, lihat Menyiapkan aplikasi Anda untuk perubahan era Jepang. Untuk fitur di .NET yang mendukung kalender dengan beberapa era dan untuk praktik terbaik saat bekerja dengan kalender yang mendukung beberapa era, lihat Bekerja dengan era.

Setiap budaya menggunakan kalender default yang ditentukan oleh properti baca-saja CultureInfo.Calendar . Setiap budaya dapat mendukung satu atau beberapa kalender yang ditentukan oleh properti baca-saja CultureInfo.OptionalCalendars . Kalender yang saat ini digunakan oleh objek tertentu CultureInfo ditentukan oleh propertinya DateTimeFormatInfo.Calendar . Ini harus menjadi salah satu kalender yang ditemukan dalam CultureInfo.OptionalCalendars array.

Kalender budaya saat ini digunakan dalam semua operasi pemformatan untuk budaya tersebut. Misalnya, kalender default budaya Buddha Thailand adalah kalender Era Buddha Thailand, yang diwakili oleh ThaiBuddhistCalendar kelas . CultureInfo Ketika objek yang mewakili budaya Buddha Thailand digunakan dalam operasi pemformatan tanggal dan waktu, kalender Era Buddha Thailand digunakan secara default. Kalender Gregorian hanya digunakan jika properti budaya DateTimeFormatInfo.Calendar diubah, seperti yang ditunjukkan contoh berikut:

var thTH = new System.Globalization.CultureInfo("th-TH");
var value = new DateTime(2016, 5, 28);

Console.WriteLine(value.ToString(thTH));

thTH.DateTimeFormat.Calendar = new System.Globalization.GregorianCalendar();
Console.WriteLine(value.ToString(thTH));
// The example displays the following output:
//       28/5/2559 0:00:00
//       28/5/2016 0:00:00
let thTH = System.Globalization.CultureInfo "th-TH"
let value = DateTime(2016, 5, 28)

printfn $"{value.ToString thTH}"

thTH.DateTimeFormat.Calendar <- System.Globalization.GregorianCalendar()

printfn $"{value.ToString thTH}"

// The example displays the following output:
//       28/5/2559 0:00:00
//       28/5/2016 0:00:00
Dim thTH As New CultureInfo("th-TH")
Dim value As New DateTime(2016, 5, 28)

Console.WriteLine(value.ToString(thTH))

thTH.DateTimeFormat.Calendar = New GregorianCalendar()
Console.WriteLine(value.ToString(thTH))
' The example displays the following output:
'       28/5/2559 0:00:00
'       28/5/2016 0:00:00

Kalender budaya saat ini juga digunakan dalam semua operasi penguraian untuk budaya tersebut, seperti yang ditunjukkan contoh berikut.

var thTH = new System.Globalization.CultureInfo("th-TH");
var value = DateTime.Parse("28/05/2559", thTH);
Console.WriteLine(value.ToString(thTH));

thTH.DateTimeFormat.Calendar = new System.Globalization.GregorianCalendar();
Console.WriteLine(value.ToString(thTH));
// The example displays the following output:
//       28/5/2559 0:00:00
//       28/5/2016 0:00:00
let thTH = System.Globalization.CultureInfo "th-TH"
let value = DateTime.Parse("28/05/2559", thTH)
printfn $"{value.ToString thTH}"

thTH.DateTimeFormat.Calendar <- System.Globalization.GregorianCalendar()
printfn $"{value.ToString thTH}"

// The example displays the following output:
//       28/5/2559 0:00:00
//       28/5/2016 0:00:00
Private Sub ThaiBuddhistEraParse()
    Dim thTH As New CultureInfo("th-TH")
    Dim value As DateTime = DateTime.Parse("28/5/2559", thTH)
    Console.WriteLine(value.ToString(thTH))

    thTH.DateTimeFormat.Calendar = New GregorianCalendar()
    Console.WriteLine(value.ToString(thTH))
    ' The example displays the following output:
    '       28/5/2559 0:00:00
    '       28/5/2016 0:00:00
End Sub

Anda membuat instans DateTime nilai menggunakan elemen tanggal dan waktu (jumlah tahun, bulan, dan hari) kalender tertentu dengan memanggil konstruktor DateTime yang menyertakan calendar parameter dan meneruskannya objek yang mewakili kalender tersebut Calendar . Contoh berikut menggunakan elemen tanggal dan waktu dari ThaiBuddhistCalendar kalender.

var thTH = new System.Globalization.CultureInfo("th-TH");
var dat = new DateTime(2559, 5, 28, thTH.DateTimeFormat.Calendar);
Console.WriteLine($"Thai Buddhist era date: {dat.ToString("d", thTH)}");
Console.WriteLine($"Gregorian date:   {dat:d}");
// The example displays the following output:
//       Thai Buddhist Era Date:  28/5/2559
//       Gregorian Date:     28/05/2016
let thTH = System.Globalization.CultureInfo "th-TH"
let dat = DateTime(2559, 5, 28, thTH.DateTimeFormat.Calendar)

printfn $"""Thai Buddhist era date: {dat.ToString("d", thTH)}"""
printfn $"Gregorian date:   {dat:d}"

// The example displays the following output:
//       Thai Buddhist Era Date:  28/5/2559
//       Gregorian Date:     28/05/2016
Dim thTH As New CultureInfo("th-TH")
Dim dat As New DateTime(2559, 5, 28, thTH.DateTimeFormat.Calendar)
Console.WriteLine($"Thai Buddhist Era date: {dat.ToString("d", thTH)}")
Console.WriteLine($"Gregorian date:   {dat:d}")
' The example displays the following output:
'       Thai Buddhist Era Date:  28/5/2559
'       Gregorian Date:     28/05/2016

DateTime konstruktor yang tidak menyertakan calendar parameter mengasumsikan bahwa elemen tanggal dan waktu dinyatakan sebagai unit dalam kalender Gregorian.

Semua properti dan metode lainnya DateTime menggunakan kalender Gregorian. Misalnya, DateTime.Year properti mengembalikan tahun di kalender Gregorian, dan DateTime.IsLeapYear(Int32) metode mengasumsikan bahwa year parameter adalah tahun di kalender Gregorian. Setiap DateTime anggota yang menggunakan kalender Gregorian memiliki anggota Calendar kelas yang sesuai yang menggunakan kalender tertentu. Misalnya, Calendar.GetYear metode mengembalikan tahun dalam kalender tertentu, dan Calendar.IsLeapYear metode menginterpretasikan year parameter sebagai angka tahun dalam kalender tertentu. Contoh berikut menggunakan DateTime dan anggota kelas yang ThaiBuddhistCalendar sesuai.

var thTH = new System.Globalization.CultureInfo("th-TH");
var cal = thTH.DateTimeFormat.Calendar;
var dat = new DateTime(2559, 5, 28, cal);
Console.WriteLine("Using the Thai Buddhist Era calendar:");
Console.WriteLine($"Date: {dat.ToString("d", thTH)}");
Console.WriteLine($"Year: {cal.GetYear(dat)}");
Console.WriteLine($"Leap year: {cal.IsLeapYear(cal.GetYear(dat))}\n");

Console.WriteLine("Using the Gregorian calendar:");
Console.WriteLine($"Date: {dat:d}");
Console.WriteLine($"Year: {dat.Year}");
Console.WriteLine($"Leap year: {DateTime.IsLeapYear(dat.Year)}");
// The example displays the following output:
//       Using the Thai Buddhist Era calendar
//       Date :   28/5/2559
//       Year: 2559
//       Leap year :   True
//
//       Using the Gregorian calendar
//       Date :   28/05/2016
//       Year: 2016
//       Leap year :   True
let thTH = System.Globalization.CultureInfo "th-TH"
let cal = thTH.DateTimeFormat.Calendar
let dat = DateTime(2559, 5, 28, cal)
printfn "Using the Thai Buddhist Era calendar:"
printfn $"""Date: {dat.ToString("d", thTH)}"""
printfn $"Year: {cal.GetYear dat}"
printfn $"Leap year: {cal.IsLeapYear(cal.GetYear dat)}\n"

printfn "Using the Gregorian calendar:"
printfn $"Date: {dat:d}"
printfn $"Year: {dat.Year}"
printfn $"Leap year: {DateTime.IsLeapYear dat.Year}"

// The example displays the following output:
//       Using the Thai Buddhist Era calendar
//       Date :   28/5/2559
//       Year: 2559
//       Leap year :   True
//
//       Using the Gregorian calendar
//       Date :   28/05/2016
//       Year: 2016
//       Leap year :   True
Dim thTH As New CultureInfo("th-TH")
Dim cal As Calendar = thTH.DateTimeFormat.Calendar
Dim dat As New DateTime(2559, 5, 28, cal)
Console.WriteLine("Using the Thai Buddhist Era calendar:")
Console.WriteLine($"Date: {dat.ToString("d", thTH)}")
Console.WriteLine($"Year: {cal.GetYear(dat)}")
Console.WriteLine($"Leap year: {cal.IsLeapYear(cal.GetYear(dat))}")
Console.WriteLine()

Console.WriteLine("Using the Gregorian calendar:")
Console.WriteLine($"Date: {dat:d}")
Console.WriteLine($"Year: {dat.Year}")
Console.WriteLine($"Leap year: {DateTime.IsLeapYear(dat.Year)}")
' The example displays the following output:
'       Using the Thai Buddhist Era calendar
'       Date :   28/5/2559
'       Year: 2559
'       Leap year :   True
'
'       Using the Gregorian calendar
'       Date :   28/05/2016
'       Year: 2016
'       Leap year :   True

Struktur DateTime mencakup DayOfWeek properti yang mengembalikan hari dalam seminggu di kalender Gregorian. Ini tidak termasuk anggota yang memungkinkan Anda untuk mengambil nomor minggu dalam setahun. Untuk mengambil minggu dalam setahun, panggil metode kalender Calendar.GetWeekOfYear individual. Contoh berikut memberikan ilustrasi.

var thTH = new System.Globalization.CultureInfo("th-TH");
var thCalendar = thTH.DateTimeFormat.Calendar;
var dat = new DateTime(1395, 8, 18, thCalendar);
Console.WriteLine("Using the Thai Buddhist Era calendar:");
Console.WriteLine($"Date: {dat.ToString("d", thTH)}");
Console.WriteLine($"Day of Week: {thCalendar.GetDayOfWeek(dat)}");
Console.WriteLine($"Week of year: {thCalendar.GetWeekOfYear(dat, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday)}\n");

var greg = new System.Globalization.GregorianCalendar();
Console.WriteLine("Using the Gregorian calendar:");
Console.WriteLine($"Date: {dat:d}");
Console.WriteLine($"Day of Week: {dat.DayOfWeek}");
Console.WriteLine($"Week of year: {greg.GetWeekOfYear(dat, System.Globalization.CalendarWeekRule.FirstDay,DayOfWeek.Sunday)}");
// The example displays the following output:
//       Using the Thai Buddhist Era calendar
//       Date :  18/8/1395
//       Day of Week: Sunday
//       Week of year: 34
//
//       Using the Gregorian calendar
//       Date :  18/08/0852
//       Day of Week: Sunday
//       Week of year: 34
let thTH = System.Globalization.CultureInfo "th-TH"
let thCalendar = thTH.DateTimeFormat.Calendar
let dat = DateTime(1395, 8, 18, thCalendar)
printfn "Using the Thai Buddhist Era calendar:"
printfn $"""Date: {dat.ToString("d", thTH)}"""
printfn $"Day of Week: {thCalendar.GetDayOfWeek dat}"
printfn $"Week of year: {thCalendar.GetWeekOfYear(dat, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday)}\n"

let greg = System.Globalization.GregorianCalendar()
printfn "Using the Gregorian calendar:"
printfn $"Date: {dat:d}"
printfn $"Day of Week: {dat.DayOfWeek}"
printfn $"Week of year: {greg.GetWeekOfYear(dat, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday)}"

// The example displays the following output:
//       Using the Thai Buddhist Era calendar
//       Date :  18/8/1395
//       Day of Week: Sunday
//       Week of year: 34
//
//       Using the Gregorian calendar
//       Date :  18/08/0852
//       Day of Week: Sunday
//       Week of year: 34
Dim thTH As New CultureInfo("th-TH")
Dim thCalendar As Calendar = thTH.DateTimeFormat.Calendar
Dim dat As New DateTime(1395, 8, 18, thCalendar)
Console.WriteLine("Using the Thai Buddhist Era calendar:")
Console.WriteLine($"Date: {dat.ToString("d", thTH)}")
Console.WriteLine($"Day of Week: {thCalendar.GetDayOfWeek(dat)}")
Console.WriteLine($"Week of year: {thCalendar.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, DayOfWeek.Sunday)}")
Console.WriteLine()

Dim greg As Calendar = New GregorianCalendar()
Console.WriteLine("Using the Gregorian calendar:")
Console.WriteLine($"Date: {dat:d}")
Console.WriteLine($"Day of Week: {dat.DayOfWeek}")
Console.WriteLine($"Week of year: {greg.GetWeekOfYear(dat, CalendarWeekRule.FirstDay, DayOfWeek.Sunday)}")
' The example displays the following output:
'       Using the Thai Buddhist Era calendar
'       Date :  18/8/1395
'       Day of Week: Sunday
'       Week of year: 34
'       
'       Using the Gregorian calendar
'       Date :  18/08/0852
'       Day of Week: Sunday
'       Week of year: 34

Untuk informasi selengkapnya tentang tanggal dan kalender, lihat Bekerja dengan Kalender.

Pertahankan nilai DateTime

Anda bisa mempertahankan DateTime nilai dengan cara berikut:

Anda harus memastikan bahwa rutinitas yang memulihkan DateTime nilai tidak kehilangan data atau memberikan pengecualian terlepas dari teknik mana yang Anda pilih. DateTime nilai harus round-trip. Artinya, nilai asli dan nilai yang dipulihkan harus sama. Dan jika nilai asli DateTime mewakili satu instans waktu, nilai tersebut harus mengidentifikasi momen waktu yang sama saat dipulihkan.

Mempertahankan nilai sebagai string

Agar berhasil memulihkan DateTime nilai yang dipertahankan sebagai string, ikuti aturan berikut:

  • Buat asumsi yang sama tentang pemformatan khusus budaya saat Anda memulihkan string seperti saat Anda mempertahankannya. Untuk memastikan bahwa string dapat dipulihkan pada sistem yang budayanya saat ini berbeda dari budaya sistem tempatnya disimpan, panggil ToString kelebihan beban untuk menyimpan string dengan menggunakan konvensi budaya invarian. Parse(String, IFormatProvider, DateTimeStyles) Panggil atau TryParse(String, IFormatProvider, DateTimeStyles, DateTime) kelebihan beban untuk memulihkan string dengan menggunakan konvensi budaya invarian. Jangan pernah menggunakan ToString(), Parse(String), atau TryParse(String, DateTime) kelebihan beban, yang menggunakan konvensi budaya saat ini.

  • Jika tanggal mewakili satu momen waktu, pastikan tanggal tersebut mewakili momen yang sama pada saat dipulihkan, bahkan pada zona waktu yang berbeda. Konversikan nilai menjadi DateTime Waktu Universal Terkoordinasi (UTC) sebelum menyimpannya atau menggunakan DateTimeOffset.

Kesalahan paling umum yang dibuat saat mempertahankan DateTime nilai sebagai string adalah mengandalkan konvensi pemformatan dari budaya default atau saat ini. Masalah muncul jika budaya saat ini berbeda saat menyimpan dan memulihkan string. Contoh berikut mengilustrasikan masalah ini. Ini menghemat lima tanggal menggunakan konvensi pemformatan budaya saat ini, yang dalam hal ini adalah bahasa Inggris (Amerika Serikat). Ini memulihkan tanggal menggunakan konvensi pemformatan dari budaya yang berbeda, yang dalam hal ini adalah Bahasa Inggris (Inggris). Karena konvensi pemformatan dari dua budaya berbeda, dua tanggal tidak dapat dipulihkan, dan tiga tanggal lainnya salah ditafsirkan. Selain itu, jika nilai tanggal dan waktu asli mewakili satu momen tepat waktu, waktu yang dipulihkan salah karena informasi zona waktu hilang.

public static void PersistAsLocalStrings()
{
    SaveLocalDatesAsString();
    RestoreLocalDatesFromString();
}

private static void SaveLocalDatesAsString()
{
    DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0),
                   new DateTime(2014, 7, 10, 23, 49, 0),
                   new DateTime(2015, 1, 10, 1, 16, 0),
                   new DateTime(2014, 12, 20, 21, 45, 0),
                   new DateTime(2014, 6, 2, 15, 14, 0) };
    string? output = null;

    Console.WriteLine($"Current Time Zone: {TimeZoneInfo.Local.DisplayName}");
    Console.WriteLine($"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:");
    for (int ctr = 0; ctr < dates.Length; ctr++)
    {
        Console.WriteLine(dates[ctr].ToString("f"));
        output += dates[ctr].ToString() + (ctr != dates.Length - 1 ? "|" : "");
    }
    var sw = new StreamWriter(filenameTxt);
    sw.Write(output);
    sw.Close();
    Console.WriteLine("Saved dates...");
}

private static void RestoreLocalDatesFromString()
{
    TimeZoneInfo.ClearCachedData();
    Console.WriteLine($"Current Time Zone: {TimeZoneInfo.Local.DisplayName}");
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
    StreamReader sr = new StreamReader(filenameTxt);
    string[] inputValues = sr.ReadToEnd().Split(new char[] { '|' },
                                                StringSplitOptions.RemoveEmptyEntries);
    sr.Close();
    Console.WriteLine("The dates on an {0} system:",
                      Thread.CurrentThread.CurrentCulture.Name);
    foreach (var inputValue in inputValues)
    {
        DateTime dateValue;
        if (DateTime.TryParse(inputValue, out dateValue))
        {
            Console.WriteLine($"'{inputValue}' --> {dateValue:f}");
        }
        else
        {
            Console.WriteLine($"Cannot parse '{inputValue}'");
        }
    }
    Console.WriteLine("Restored dates...");
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       Cannot parse //6/14/2014 6:32:00 AM//
//       //7/10/2014 11:49:00 PM// --> 07 October 2014 23:49
//       //1/10/2015 1:16:00 AM// --> 01 October 2015 01:16
//       Cannot parse //12/20/2014 9:45:00 PM//
//       //6/2/2014 3:14:00 PM// --> 06 February 2014 15:14
//       Restored dates...
let saveLocalDatesAsString () =
    let dates = 
        [ DateTime(2014, 6, 14, 6, 32, 0)
          DateTime(2014, 7, 10, 23, 49, 0)
          DateTime(2015, 1, 10, 1, 16, 0)
          DateTime(2014, 12, 20, 21, 45, 0)
          DateTime(2014, 6, 2, 15, 14, 0) ]

    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"

    let output =
        [ for date in dates do
            printfn $"{date}"
            string date ]
        |> String.concat "|"

    use sw = new StreamWriter(filenameTxt)
    sw.Write output
    printfn "Saved dates..."

let restoreLocalDatesFromString () =
    TimeZoneInfo.ClearCachedData()
    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "en-GB"

    use sr = new StreamReader(filenameTxt)
    let inputValues = 
        sr.ReadToEnd().Split('|', StringSplitOptions.RemoveEmptyEntries)

    printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"

    for inputValue in inputValues do
        match DateTime.TryParse inputValue with
        | true, dateValue ->
            printfn $"'{inputValue}' --> {dateValue:f}"
        | _ ->
            printfn $"Cannot parse '{inputValue}'"

    printfn "Restored dates..."

let persistAsLocalStrings () =
    saveLocalDatesAsString ()
    restoreLocalDatesFromString ()

// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       Cannot parse //6/14/2014 6:32:00 AM//
//       //7/10/2014 11:49:00 PM// --> 07 October 2014 23:49
//       //1/10/2015 1:16:00 AM// --> 01 October 2015 01:16
//       Cannot parse //12/20/2014 9:45:00 PM//
//       //6/2/2014 3:14:00 PM// --> 06 February 2014 15:14
//       Restored dates...

Agar nilai round-trip DateTime berhasil, ikuti langkah-langkah berikut:

  1. Jika nilai mewakili satu momen waktu, konversikan dari waktu lokal ke UTC dengan memanggil ToUniversalTime metode .
  2. Konversikan tanggal ke representasi string mereka dengan memanggil ToString(String, IFormatProvider) atau String.Format(IFormatProvider, String, Object[]) kelebihan beban. Gunakan konvensi pemformatan budaya invarian dengan menentukan CultureInfo.InvariantCulture sebagai provider argumen . Tentukan bahwa nilai harus melakukan round-trip dengan menggunakan string format standar "O" atau "R".

Untuk memulihkan nilai yang bertahan DateTime tanpa kehilangan data, ikuti langkah-langkah berikut:

  1. Uraikan data dengan memanggil ParseExact atau TryParseExact kelebihan beban. Tentukan CultureInfo.InvariantCulture sebagai provider argumen, dan gunakan string format standar yang sama dengan yang Anda gunakan untuk format argumen selama konversi. Sertakan DateTimeStyles.RoundtripKind nilai dalam styles argumen .
  2. DateTime Jika nilai mewakili satu momen tepat waktu, panggil ToLocalTime metode untuk mengonversi tanggal yang diurai dari UTC ke waktu lokal.

Contoh berikut menggunakan budaya invarian dan string format standar "O" untuk memastikan bahwa nilai yang DateTime disimpan dan dipulihkan mewakili momen yang sama dalam waktu terlepas dari sistem, budaya, atau zona waktu sistem sumber dan target.

public static void PersistAsInvariantStrings()
{
    SaveDatesAsInvariantStrings();
    RestoreDatesAsInvariantStrings();
}

private static void SaveDatesAsInvariantStrings()
{
    DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0),
                   new DateTime(2014, 7, 10, 23, 49, 0),
                   new DateTime(2015, 1, 10, 1, 16, 0),
                   new DateTime(2014, 12, 20, 21, 45, 0),
                   new DateTime(2014, 6, 2, 15, 14, 0) };
    string? output = null;

    Console.WriteLine($"Current Time Zone: {TimeZoneInfo.Local.DisplayName}");
    Console.WriteLine($"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:");
    for (int ctr = 0; ctr < dates.Length; ctr++)
    {
        Console.WriteLine(dates[ctr].ToString("f"));
        output += dates[ctr].ToUniversalTime().ToString("O", CultureInfo.InvariantCulture)
                  + (ctr != dates.Length - 1 ? "|" : "");
    }
    var sw = new StreamWriter(filenameTxt);
    sw.Write(output);
    sw.Close();
    Console.WriteLine("Saved dates...");
}

private static void RestoreDatesAsInvariantStrings()
{
    TimeZoneInfo.ClearCachedData();
    Console.WriteLine("Current Time Zone: {0}",
                      TimeZoneInfo.Local.DisplayName);
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
    StreamReader sr = new StreamReader(filenameTxt);
    string[] inputValues = sr.ReadToEnd().Split(new char[] { '|' },
                                                StringSplitOptions.RemoveEmptyEntries);
    sr.Close();
    Console.WriteLine("The dates on an {0} system:",
                      Thread.CurrentThread.CurrentCulture.Name);
    foreach (var inputValue in inputValues)
    {
        DateTime dateValue;
        if (DateTime.TryParseExact(inputValue, "O", CultureInfo.InvariantCulture,
                              DateTimeStyles.RoundtripKind, out dateValue))
        {
            Console.WriteLine($"'{inputValue}' --> {dateValue.ToLocalTime():f}");
        }
        else
        {
            Console.WriteLine("Cannot parse '{0}'", inputValue);
        }
    }
    Console.WriteLine("Restored dates...");
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       '2014-06-14T13:32:00.0000000Z' --> 14 June 2014 14:32
//       '2014-07-11T06:49:00.0000000Z' --> 11 July 2014 07:49
//       '2015-01-10T09:16:00.0000000Z' --> 10 January 2015 09:16
//       '2014-12-21T05:45:00.0000000Z' --> 21 December 2014 05:45
//       '2014-06-02T22:14:00.0000000Z' --> 02 June 2014 23:14
//       Restored dates...
let saveDatesAsInvariantStrings () =
    let dates = 
        [ DateTime(2014, 6, 14, 6, 32, 0)
          DateTime(2014, 7, 10, 23, 49, 0)
          DateTime(2015, 1, 10, 1, 16, 0)
          DateTime(2014, 12, 20, 21, 45, 0)
          DateTime(2014, 6, 2, 15, 14, 0) ]

    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"

    let output =
        [ for date in dates do
            printfn $"{date:f}"
            date.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) ]
        |> String.concat "|"

    use sw = new StreamWriter(filenameTxt)
    sw.Write output
    printfn "Saved dates..."

let restoreDatesAsInvariantStrings () =
    TimeZoneInfo.ClearCachedData()
    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "en-GB"
    
    use sr = new StreamReader(filenameTxt)
    let inputValues = 
        sr.ReadToEnd().Split('|', StringSplitOptions.RemoveEmptyEntries)

    printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"

    for inputValue in inputValues do
        match DateTime.TryParseExact(inputValue, "O", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) with
        | true, dateValue ->
            printfn $"'{inputValue}' --> {dateValue.ToLocalTime():f}"
        | _ ->
            printfn $"Cannot parse '{inputValue}'"

    printfn "Restored dates..."

let persistAsInvariantStrings () =
    saveDatesAsInvariantStrings ()
    restoreDatesAsInvariantStrings ()

// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       '2014-06-14T13:32:00.0000000Z' --> 14 June 2014 14:32
//       '2014-07-11T06:49:00.0000000Z' --> 11 July 2014 07:49
//       '2015-01-10T09:16:00.0000000Z' --> 10 January 2015 09:16
//       '2014-12-21T05:45:00.0000000Z' --> 21 December 2014 05:45
//       '2014-06-02T22:14:00.0000000Z' --> 02 June 2014 23:14
//       Restored dates...
Mempertahankan nilai sebagai bilangan bulat

Anda dapat mempertahankan tanggal dan waktu sebagai Int64 nilai yang mewakili sejumlah tanda centang. Dalam hal ini, Anda tidak perlu mempertimbangkan budaya sistem tempat DateTime nilai dipertahankan dan dipulihkan.

Untuk mempertahankan DateTime nilai sebagai bilangan bulat:

  • DateTime Jika nilai mewakili satu momen tepat waktu, konversikan ke UTC dengan memanggil ToUniversalTime metode .
  • Ambil jumlah tanda centang yang diwakili oleh DateTime nilai dari propertinya Ticks .

Untuk memulihkan DateTime nilai yang telah dipertahankan sebagai bilangan bulat:

  1. Buat instans objek baru DateTime dengan meneruskan Int64 nilai ke DateTime(Int64) konstruktor.
  2. DateTime Jika nilai mewakili satu momen dalam waktu, konversikan dari UTC ke waktu lokal dengan memanggil ToLocalTime metode .

Contoh berikut mempertahankan array nilai sebagai bilangan DateTime bulat pada sistem di zona Waktu Pasifik A.S. Ini memulihkannya pada sistem di zona UTC. File yang berisi bilangan bulat menyertakan Int32 nilai yang menunjukkan jumlah Int64 total nilai yang segera mengikutinya.

public static void PersistAsIntegers()
{
    SaveDatesAsInts();
    RestoreDatesAsInts();
}

private static void SaveDatesAsInts()
{
    DateTime[] dates = { new DateTime(2014, 6, 14, 6, 32, 0),
                   new DateTime(2014, 7, 10, 23, 49, 0),
                   new DateTime(2015, 1, 10, 1, 16, 0),
                   new DateTime(2014, 12, 20, 21, 45, 0),
                   new DateTime(2014, 6, 2, 15, 14, 0) };

    Console.WriteLine($"Current Time Zone: {TimeZoneInfo.Local.DisplayName}");
    Console.WriteLine($"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:");
    var ticks = new long[dates.Length];
    for (int ctr = 0; ctr < dates.Length; ctr++)
    {
        Console.WriteLine(dates[ctr].ToString("f"));
        ticks[ctr] = dates[ctr].ToUniversalTime().Ticks;
    }
    var fs = new FileStream(filenameInts, FileMode.Create);
    var bw = new BinaryWriter(fs);
    bw.Write(ticks.Length);
    foreach (var tick in ticks)
        bw.Write(tick);

    bw.Close();
    Console.WriteLine("Saved dates...");
}

private static void RestoreDatesAsInts()
{
    TimeZoneInfo.ClearCachedData();
    Console.WriteLine($"Current Time Zone: {TimeZoneInfo.Local.DisplayName}");
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
    FileStream fs = new FileStream(filenameInts, FileMode.Open);
    BinaryReader br = new BinaryReader(fs);
    int items;
    DateTime[] dates;

    try
    {
        items = br.ReadInt32();
        dates = new DateTime[items];

        for (int ctr = 0; ctr < items; ctr++)
        {
            long ticks = br.ReadInt64();
            dates[ctr] = new DateTime(ticks).ToLocalTime();
        }
    }
    catch (EndOfStreamException)
    {
        Console.WriteLine("File corruption detected. Unable to restore data...");
        return;
    }
    catch (IOException)
    {
        Console.WriteLine("Unspecified I/O error. Unable to restore data...");
        return;
    }
    // Thrown during array initialization.
    catch (OutOfMemoryException)
    {
        Console.WriteLine("File corruption detected. Unable to restore data...");
        return;
    }
    finally
    {
        br.Close();
    }

    Console.WriteLine($"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:");
    foreach (var value in dates)
        Console.WriteLine(value.ToString("f"));

    Console.WriteLine("Restored dates...");
}
// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...
let saveDatesAsInts () =
    let dates = 
        [ DateTime(2014, 6, 14, 6, 32, 0)
          DateTime(2014, 7, 10, 23, 49, 0)
          DateTime(2015, 1, 10, 1, 16, 0)
          DateTime(2014, 12, 20, 21, 45, 0)
          DateTime(2014, 6, 2, 15, 14, 0) ]

    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"
    let ticks =
        [| for date in dates do
            printfn $"{date:f}"
            date.ToUniversalTime().Ticks |]
    use fs = new FileStream(filenameInts, FileMode.Create)
    use bw = new BinaryWriter(fs)
    bw.Write ticks.Length

    for tick in ticks do
        bw.Write tick

    printfn "Saved dates..."

let restoreDatesAsInts () =
    TimeZoneInfo.ClearCachedData()
    printfn $"Current Time Zone: {TimeZoneInfo.Local.DisplayName}"
    Thread.CurrentThread.CurrentCulture <- CultureInfo.CreateSpecificCulture "en-GB"
    use fs = new FileStream(filenameInts, FileMode.Open)
    use br = new BinaryReader(fs)

    try
        let items = br.ReadInt32()
        let dates =
            [| for _ in 0..items do
                let ticks = br.ReadInt64()
                DateTime(ticks).ToLocalTime() |]

        printfn $"The dates on an {Thread.CurrentThread.CurrentCulture.Name} system:"
        for value in dates do
            printfn $"{value:f}"
    with 
    | :? EndOfStreamException ->
        printfn "File corruption detected. Unable to restore data..."
    | :? IOException ->
        printfn "Unspecified I/O error. Unable to restore data..."
    // Thrown during array initialization.
    | :? OutOfMemoryException ->
        printfn"File corruption detected. Unable to restore data..."

    printfn "Restored dates..."

let persistAsIntegers () =
    saveDatesAsInts ()
    restoreDatesAsInts ()

// When saved on an en-US system, the example displays the following output:
//       Current Time Zone: (UTC-08:00) Pacific Time (US & Canada)
//       The dates on an en-US system:
//       Saturday, June 14, 2014 6:32 AM
//       Thursday, July 10, 2014 11:49 PM
//       Saturday, January 10, 2015 1:16 AM
//       Saturday, December 20, 2014 9:45 PM
//       Monday, June 02, 2014 3:14 PM
//       Saved dates...
//
// When restored on an en-GB system, the example displays the following output:
//       Current Time Zone: (UTC) Dublin, Edinburgh, Lisbon, London
//       The dates on an en-GB system:
//       14 June 2014 14:32
//       11 July 2014 07:49
//       10 January 2015 09:16
//       21 December 2014 05:45
//       02 June 2014 23:14
//       Restored dates...

Menserialisasikan nilai DateTime

Anda dapat mempertahankan DateTime nilai melalui serialisasi ke aliran atau file, lalu memulihkannya melalui deserialisasi. DateTime data diserialisasikan dalam beberapa format objek tertentu. Objek dipulihkan ketika dideserialisasi. Formatter atau serializer, seperti JsonSerializer atau XmlSerializer, menangani proses serialisasi dan deserialisasi. Untuk informasi selengkapnya tentang serialisasi dan jenis serialisasi yang didukung oleh .NET, lihat Serialisasi.

Contoh berikut menggunakan kelas untuk menserialisasikan XmlSerializer dan mendeserialisasi DateTime nilai. Nilai-nilai mewakili semua hari tahun kampung pada abad kedua puluh pertama. Output mewakili hasil jika contoh dijalankan pada sistem yang budayanya saat ini adalah Inggris (Inggris). Karena Anda telah mendeserialisasi objek itu DateTime sendiri, kode tidak harus menangani perbedaan budaya dalam format tanggal dan waktu.

public static void PersistAsXML()
{
    // Serialize the data.
    var leapYears = new List<DateTime>();
    for (int year = 2000; year <= 2100; year += 4)
    {
        if (DateTime.IsLeapYear(year))
            leapYears.Add(new DateTime(year, 2, 29));
    }
    DateTime[] dateArray = leapYears.ToArray();

    var serializer = new XmlSerializer(dateArray.GetType());
    TextWriter sw = new StreamWriter(filenameXml);

    try
    {
        serializer.Serialize(sw, dateArray);
    }
    catch (InvalidOperationException e)
    {
        Console.WriteLine(e.InnerException?.Message);
    }
    finally
    {
        if (sw != null) sw.Close();
    }

    // Deserialize the data.
    DateTime[]? deserializedDates;
    using (var fs = new FileStream(filenameXml, FileMode.Open))
    {
        deserializedDates = (DateTime[]?)serializer.Deserialize(fs);
    }

    // Display the dates.
    Console.WriteLine($"Leap year days from 2000-2100 on an {Thread.CurrentThread.CurrentCulture.Name} system:");
    int nItems = 0;
    if (deserializedDates is not null)
    {
        foreach (var dat in deserializedDates)
        {
            Console.Write($"   {dat:d}     ");
            nItems++;
            if (nItems % 5 == 0)
                Console.WriteLine();
        }
    }
}
// The example displays the following output:
//    Leap year days from 2000-2100 on an en-GB system:
//       29/02/2000       29/02/2004       29/02/2008       29/02/2012       29/02/2016
//       29/02/2020       29/02/2024       29/02/2028       29/02/2032       29/02/2036
//       29/02/2040       29/02/2044       29/02/2048       29/02/2052       29/02/2056
//       29/02/2060       29/02/2064       29/02/2068       29/02/2072       29/02/2076
//       29/02/2080       29/02/2084       29/02/2088       29/02/2092       29/02/2096
let persistAsXML () =
    // Serialize the data.
    let leapYears =
        [| for year in 2000..4..2100 do
            if DateTime.IsLeapYear year then
                DateTime(year, 2, 29) |]

    let serializer = XmlSerializer(leapYears.GetType())
    use sw = new StreamWriter(filenameXml)

    try
        serializer.Serialize(sw, leapYears)
    with :? InvalidOperationException as e ->
        printfn $"{e.InnerException.Message}"

    // Deserialize the data.
    use fs = new FileStream(filenameXml, FileMode.Open)
        
    let deserializedDates = serializer.Deserialize fs :?> DateTime []

    // Display the dates.
    printfn $"Leap year days from 2000-2100 on an {Thread.CurrentThread.CurrentCulture.Name} system:"
    
    let mutable nItems = 0
    for dat in deserializedDates do
        printf $"   {dat:d}     "
        nItems <- nItems + 1
        if nItems % 5 = 0 then
            printfn ""

// The example displays the following output:
//    Leap year days from 2000-2100 on an en-GB system:
//       29/02/2000       29/02/2004       29/02/2008       29/02/2012       29/02/2016
//       29/02/2020       29/02/2024       29/02/2028       29/02/2032       29/02/2036
//       29/02/2040       29/02/2044       29/02/2048       29/02/2052       29/02/2056
//       29/02/2060       29/02/2064       29/02/2068       29/02/2072       29/02/2076
//       29/02/2080       29/02/2084       29/02/2088       29/02/2092       29/02/2096

Contoh sebelumnya tidak menyertakan informasi waktu. DateTime Jika nilai mewakili momen tepat waktu dan dinyatakan sebagai waktu setempat, konversikan dari waktu lokal ke UTC sebelum menserialisasikannya dengan memanggil ToUniversalTime metode . Setelah Anda mendeserialisasinya, konversikan dari UTC ke waktu lokal dengan memanggil ToLocalTime metode .

DateTime vs. TimeSpan

Jenis DateTime nilai dan TimeSpan berbeda di mana mewakili DateTime instan dalam waktu, sedangkan mewakili TimeSpan interval waktu. Anda dapat mengurangi satu instans dari DateTime instans lain untuk mendapatkan TimeSpan objek yang mewakili interval waktu di antaranya. Atau Anda dapat menambahkan positif TimeSpan ke saat ini DateTime untuk mendapatkan DateTime nilai yang mewakili tanggal mendatang.

Anda dapat menambahkan atau mengurangi interval waktu dari DateTime objek. Interval waktu bisa negatif atau positif, dan dapat diekspresikan dalam unit seperti tanda centang, detik, atau sebagai TimeSpan objek.

Bandingkan untuk kesetaraan dalam toleransi

Perbandingan kesetaraan untuk DateTime nilai tepat. Itu berarti dua nilai harus dinyatakan sebagai jumlah tick yang sama untuk dianggap sama. Presisi itu sering kali tidak perlu atau bahkan salah untuk banyak aplikasi. Seringkali, Anda ingin menguji apakah DateTime objek kira-kira sama.

Contoh berikut menunjukkan cara membandingkan nilai yang kira-kira setara DateTime . Ini menerima selisih kecil perbedaan ketika mendeklarasikannya sama.

public static bool RoughlyEquals(DateTime time, DateTime timeWithWindow, int windowInSeconds, int frequencyInSeconds)
{
    long delta = (long)((TimeSpan)(timeWithWindow - time)).TotalSeconds % frequencyInSeconds;
    delta = delta > windowInSeconds ? frequencyInSeconds - delta : delta;
    return Math.Abs(delta) < windowInSeconds;
}

public static void TestRoughlyEquals()
{
    int window = 10;
    int freq = 60 * 60 * 2; // 2 hours;

    DateTime d1 = DateTime.Now;

    DateTime d2 = d1.AddSeconds(2 * window);
    DateTime d3 = d1.AddSeconds(-2 * window);
    DateTime d4 = d1.AddSeconds(window / 2);
    DateTime d5 = d1.AddSeconds(-window / 2);

    DateTime d6 = (d1.AddHours(2)).AddSeconds(2 * window);
    DateTime d7 = (d1.AddHours(2)).AddSeconds(-2 * window);
    DateTime d8 = (d1.AddHours(2)).AddSeconds(window / 2);
    DateTime d9 = (d1.AddHours(2)).AddSeconds(-window / 2);

    Console.WriteLine($"d1 ({d1}) ~= d1 ({d1}): {RoughlyEquals(d1, d1, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d2 ({d2}): {RoughlyEquals(d1, d2, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d3 ({d3}): {RoughlyEquals(d1, d3, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d4 ({d4}): {RoughlyEquals(d1, d4, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d5 ({d5}): {RoughlyEquals(d1, d5, window, freq)}");

    Console.WriteLine($"d1 ({d1}) ~= d6 ({d6}): {RoughlyEquals(d1, d6, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d7 ({d7}): {RoughlyEquals(d1, d7, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d8 ({d8}): {RoughlyEquals(d1, d8, window, freq)}");
    Console.WriteLine($"d1 ({d1}) ~= d9 ({d9}): {RoughlyEquals(d1, d9, window, freq)}");
}
// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True
let roughlyEquals (time: DateTime) (timeWithWindow: DateTime) windowInSeconds frequencyInSeconds =
    let delta = 
        int64 (timeWithWindow - time).TotalSeconds % frequencyInSeconds
    
    let delta = if delta > windowInSeconds then frequencyInSeconds - delta else delta
    abs delta < windowInSeconds

let testRoughlyEquals () =
    let window = 10
    let window' = 10.
    let freq = 60 * 60 * 2 // 2 hours

    let d1 = DateTime.Now

    let d2 = d1.AddSeconds(2. * window')
    let d3 = d1.AddSeconds(-2. * window')
    let d4 = d1.AddSeconds(window' / 2.)
    let d5 = d1.AddSeconds(-window' / 2.)

    let d6 = (d1.AddHours 2).AddSeconds(2. * window')
    let d7 = (d1.AddHours 2).AddSeconds(-2. * window')
    let d8 = (d1.AddHours 2).AddSeconds(window' / 2.)
    let d9 = (d1.AddHours 2).AddSeconds(-window' / 2.)

    printfn $"d1 ({d1}) ~= d1 ({d1}): {roughlyEquals d1 d1 window freq}"
    printfn $"d1 ({d1}) ~= d2 ({d2}): {roughlyEquals d1 d2 window freq}"
    printfn $"d1 ({d1}) ~= d3 ({d3}): {roughlyEquals d1 d3 window freq}"
    printfn $"d1 ({d1}) ~= d4 ({d4}): {roughlyEquals d1 d4 window freq}"
    printfn $"d1 ({d1}) ~= d5 ({d5}): {roughlyEquals d1 d5 window freq}"

    printfn $"d1 ({d1}) ~= d6 ({d6}): {roughlyEquals d1 d6 window freq}"
    printfn $"d1 ({d1}) ~= d7 ({d7}): {roughlyEquals d1 d7 window freq}"
    printfn $"d1 ({d1}) ~= d8 ({d8}): {roughlyEquals d1 d8 window freq}"
    printfn $"d1 ({d1}) ~= d9 ({d9}): {roughlyEquals d1 d9 window freq}"

// The example displays output similar to the following:
//    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
//    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
//    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True
Public Shared Function RoughlyEquals(time As DateTime, timeWithWindow As DateTime,
                             windowInSeconds As Integer,
                             frequencyInSeconds As Integer) As Boolean
    Dim delta As Long = (timeWithWindow.Subtract(time)).TotalSeconds _
                                            Mod frequencyInSeconds

    If delta > windowInSeconds Then
        delta = frequencyInSeconds - delta
    End If

    Return Math.Abs(delta) < windowInSeconds
End Function

Public Shared Sub TestRoughlyEquals()
    Dim window As Integer = 10
    Dim freq As Integer = 60 * 60 * 2 ' 2 hours;
    Dim d1 As DateTime = DateTime.Now

    Dim d2 As DateTime = d1.AddSeconds(2 * window)
    Dim d3 As DateTime = d1.AddSeconds(-2 * window)
    Dim d4 As DateTime = d1.AddSeconds(window / 2)
    Dim d5 As DateTime = d1.AddSeconds(-window / 2)

    Dim d6 As DateTime = d1.AddHours(2).AddSeconds(2 * window)
    Dim d7 As DateTime = d1.AddHours(2).AddSeconds(-2 * window)
    Dim d8 As DateTime = d1.AddHours(2).AddSeconds(window / 2)
    Dim d9 As DateTime = d1.AddHours(2).AddSeconds(-window / 2)

    Console.WriteLine($"d1 ({d1}) ~= d1 ({d1}): {RoughlyEquals(d1, d1, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d2 ({d2}): {RoughlyEquals(d1, d2, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d3 ({d3}): {RoughlyEquals(d1, d3, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d4 ({d4}): {RoughlyEquals(d1, d4, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d5 ({d5}): {RoughlyEquals(d1, d5, window, freq)}")

    Console.WriteLine($"d1 ({d1}) ~= d6 ({d6}): {RoughlyEquals(d1, d6, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d7 ({d7}): {RoughlyEquals(d1, d7, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d8 ({d8}): {RoughlyEquals(d1, d8, window, freq)}")
    Console.WriteLine($"d1 ({d1}) ~= d9 ({d9}): {RoughlyEquals(d1, d9, window, freq)}")
End Sub
' The example displays output similar to the following:
'    d1 (1/28/2010 9:01:26 PM) ~= d1 (1/28/2010 9:01:26 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d2 (1/28/2010 9:01:46 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d3 (1/28/2010 9:01:06 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d4 (1/28/2010 9:01:31 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d5 (1/28/2010 9:01:21 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d6 (1/28/2010 11:01:46 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d7 (1/28/2010 11:01:06 PM): False
'    d1 (1/28/2010 9:01:26 PM) ~= d8 (1/28/2010 11:01:31 PM): True
'    d1 (1/28/2010 9:01:26 PM) ~= d9 (1/28/2010 11:01:21 PM): True

Pertimbangan interop COM

DateTime Nilai yang ditransfer ke aplikasi COM, kemudian ditransfer kembali ke aplikasi terkelola, dikatakan untuk pulang-pergi. Namun, DateTime nilai yang hanya menentukan waktu tidak melakukan perjalanan pulang-pergi seperti yang mungkin Anda harapkan.

Jika Anda pulang-pergi hanya sekali waktu, seperti 3 P.M., tanggal dan waktu akhir adalah 30 Desember 1899 C.E. pada 3:00 P.M., alih-alih Januari, 1, 0001 C.E. pada 3:00 P.M. .NET Framework dan COM mengasumsikan tanggal default ketika hanya waktu yang ditentukan. Namun, sistem COM mengasumsikan tanggal dasar 30 Desember 1899 C.E., sementara .NET Framework mengasumsikan tanggal dasar Januari, 1, 0001 C.E.

Ketika hanya satu waktu yang diteruskan dari .NET Framework ke COM, pemrosesan khusus dilakukan yang mengonversi waktu ke format yang digunakan oleh COM. Ketika hanya satu waktu yang diteruskan dari COM ke .NET Framework, tidak ada pemrosesan khusus yang dilakukan karena itu akan merusak tanggal dan waktu yang sah pada atau sebelum 30 Desember 1899. Jika tanggal memulai perjalanan pulang-pergi dari COM, .NET Framework dan COM mempertahankan tanggal.

Perilaku .NET Framework dan COM berarti bahwa jika aplikasi Anda melakukan perjalanan DateTime pulang pergi yang hanya menentukan waktu, aplikasi Anda harus ingat untuk memodifikasi atau mengabaikan tanggal yang salah dari objek akhirDateTime.

Konstruktor

DateTime(DateOnly, TimeOnly)

Menginisialisasi instans DateTime baru struktur ke yang ditentukan DateOnly dan TimeOnly. Instans baru akan memiliki jenisnya Unspecified .

DateTime(DateOnly, TimeOnly, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke yang ditentukan DateOnly dan TimeOnly dan menghormati DateTimeKind.

DateTime(Int32, Int32, Int32)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, dan hari yang ditentukan.

DateTime(Int32, Int32, Int32, Calendar)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, dan hari yang ditentukan untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, dan detik yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, dan detik yang ditentukan untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, dan milidetik yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, dan milidetik yang ditentukan untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) atau waktu setempat yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, Calendar, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat untuk kalender yang ditentukan.

DateTime(Int32, Int32, Int32, Int32, Int32, Int32, Int32, Int32, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke tahun, bulan, hari, jam, menit, detik, milidetik, dan Waktu Universal Terkoordinasi (UTC) yang ditentukan atau waktu setempat untuk kalender yang ditentukan.

DateTime(Int64)

Menginisialisasi instans DateTime baru struktur ke jumlah tick tertentu.

DateTime(Int64, DateTimeKind)

Menginisialisasi instans DateTime baru struktur ke jumlah tick tertentu dan ke Waktu Universal Terkoordinasi (UTC) atau waktu lokal.

Bidang

MaxValue

Mewakili nilai terbesar yang mungkin dari DateTime. Bidang ini hanya-baca.

MinValue

Mewakili nilai sekecil mungkin dari DateTime. Bidang ini hanya-baca.

UnixEpoch

Nilai konstanta ini setara dengan 00:00:00.0000000 UTC, 1 Januari 1970, di kalender Gregorian. UnixEpoch menentukan titik waktu ketika waktu Unix sama dengan 0.

Properti

Date

Mendapatkan komponen tanggal instans ini.

Day

Mendapatkan hari dalam sebulan yang diwakili oleh instans ini.

DayOfWeek

Mendapatkan hari dalam seminggu yang diwakili oleh instans ini.

DayOfYear

Mendapatkan hari dalam setahun yang diwakili oleh instans ini.

Hour

Mendapatkan komponen jam dari tanggal yang diwakili oleh instans ini.

Kind

Mendapatkan nilai yang menunjukkan apakah waktu yang diwakili oleh instans ini didasarkan pada waktu lokal, Waktu Universal Terkoordinasi (UTC), atau tidak keduanya.

Microsecond

Komponen microseconds, dinyatakan sebagai nilai antara 0 dan 999.

Millisecond

Mendapatkan komponen milidetik dari tanggal yang diwakili oleh instans ini.

Minute

Mendapatkan komponen menit dari tanggal yang diwakili oleh instans ini.

Month

Mendapatkan komponen bulan dari tanggal yang diwakili oleh instans ini.

Nanosecond

Komponen nanodetik, dinyatakan sebagai nilai antara 0 dan 900 (dengan kenaikan 100 nanodetik).

Now

DateTime Mendapatkan objek yang diatur ke tanggal dan waktu saat ini pada komputer ini, yang dinyatakan sebagai waktu setempat.

Second

Mendapatkan komponen detik dari tanggal yang diwakili oleh instans ini.

Ticks

Mendapatkan jumlah tanda centang yang mewakili tanggal dan waktu instans ini.

TimeOfDay

Mendapatkan waktu untuk instans ini.

Today

Mendapatkan tanggal saat ini.

UtcNow

DateTime Mendapatkan objek yang diatur ke tanggal dan waktu saat ini pada komputer ini, yang dinyatakan sebagai Waktu Universal Terkoordinasi (UTC).

Year

Mendapatkan komponen tahun dari tanggal yang diwakili oleh instans ini.

Metode

Add(TimeSpan)

Mengembalikan baru DateTime yang menambahkan nilai yang ditentukan TimeSpan ke nilai instans ini.

AddDays(Double)

Mengembalikan baru DateTime yang menambahkan jumlah hari yang ditentukan ke nilai instans ini.

AddHours(Double)

Mengembalikan baru DateTime yang menambahkan jumlah jam yang ditentukan ke nilai instans ini.

AddMicroseconds(Double)

Mengembalikan baru DateTime yang menambahkan jumlah mikrostik yang ditentukan ke nilai instans ini.

AddMilliseconds(Double)

Mengembalikan baru DateTime yang menambahkan jumlah milidetik yang ditentukan ke nilai instans ini.

AddMinutes(Double)

Mengembalikan baru DateTime yang menambahkan jumlah menit yang ditentukan ke nilai instans ini.

AddMonths(Int32)

Mengembalikan baru DateTime yang menambahkan jumlah bulan yang ditentukan ke nilai instans ini.

AddSeconds(Double)

Mengembalikan baru DateTime yang menambahkan jumlah detik yang ditentukan ke nilai instans ini.

AddTicks(Int64)

Mengembalikan baru DateTime yang menambahkan jumlah tanda centang yang ditentukan ke nilai instans ini.

AddYears(Int32)

Mengembalikan baru DateTime yang menambahkan jumlah tahun yang ditentukan ke nilai instans ini.

Compare(DateTime, DateTime)

Membandingkan dua instans dan mengembalikan bilangan DateTime bulat yang menunjukkan apakah instans pertama lebih awal dari, sama dengan, atau lebih baru dari instans kedua.

CompareTo(DateTime)

Membandingkan nilai instans ini dengan nilai yang ditentukan DateTime dan mengembalikan bilangan bulat yang menunjukkan apakah instans ini lebih awal dari, sama dengan, atau lebih baru dari nilai yang ditentukan DateTime .

CompareTo(Object)

Membandingkan nilai instans ini dengan objek tertentu yang berisi nilai tertentu DateTime , dan mengembalikan bilangan bulat yang menunjukkan apakah instans ini lebih awal dari, sama dengan, atau lebih baru dari nilai yang ditentukan DateTime .

DaysInMonth(Int32, Int32)

Mengembalikan jumlah hari dalam bulan dan tahun yang ditentukan.

Deconstruct(DateOnly, TimeOnly)

Mendekonstruksi instans ini DateTime dengan DateOnly dan TimeOnly.

Deconstruct(Int32, Int32, Int32)

Mendekonstruksi instans ini DateOnly dengan Year, Month, dan Day.

Equals(DateTime)

Mengembalikan nilai yang menunjukkan apakah nilai instans ini sama dengan nilai instans yang ditentukan DateTime .

Equals(DateTime, DateTime)

Mengembalikan nilai yang menunjukkan apakah dua DateTime instans memiliki nilai tanggal dan waktu yang sama.

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

FromBinary(Int64)

Mendeserialisasi nilai biner 64-bit dan membuat ulang objek serial DateTime asli.

FromFileTime(Int64)

Mengonversi waktu file Windows yang ditentukan ke waktu lokal yang setara.

FromFileTimeUtc(Int64)

Mengonversi waktu file Windows yang ditentukan ke waktu UTC yang setara.

FromOADate(Double)

Mengembalikan yang DateTime setara dengan Tanggal Otomatisasi OLE yang ditentukan.

GetDateTimeFormats()

Mengonversi nilai instans ini ke semua representasi string yang didukung oleh penentu format tanggal dan waktu standar.

GetDateTimeFormats(Char)

Mengonversi nilai instans ini ke semua representasi string yang didukung oleh penentu format tanggal dan waktu standar yang ditentukan.

GetDateTimeFormats(Char, IFormatProvider)

Mengonversi nilai instans ini ke semua representasi string yang didukung oleh penentu format tanggal dan waktu standar yang ditentukan dan informasi pemformatan khusus budaya.

GetDateTimeFormats(IFormatProvider)

Mengonversi nilai instans ini ke semua representasi string yang didukung oleh penentu format tanggal dan waktu standar dan informasi pemformatan khusus budaya yang ditentukan.

GetHashCode()

Mengembalikan kode hash untuk instans ini.

GetTypeCode()

Mengembalikan TypeCode untuk jenis DateTimenilai .

IsDaylightSavingTime()

Menunjukkan apakah instans DateTime ini berada dalam rentang waktu musim panas untuk zona waktu saat ini.

IsLeapYear(Int32)

Mengembalikan indikasi apakah tahun yang ditentukan adalah tahun kampung.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Mengurai rentang karakter menjadi nilai.

Parse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

Mengonversi rentang memori yang berisi representasi string tanggal dan waktu yang DateTime setara dengannya dengan menggunakan informasi format khusus budaya dan gaya pemformatan.

Parse(String)

Mengonversi representasi string tanggal dan waktu menjadi DateTime setara dengan menggunakan konvensi budaya saat ini.

Parse(String, IFormatProvider)

Mengonversi representasi string tanggal dan waktu menjadi DateTime setara dengan menggunakan informasi format khusus budaya.

Parse(String, IFormatProvider, DateTimeStyles)

Mengonversi representasi string tanggal dan waktu menjadi DateTime setara dengan menggunakan informasi format khusus budaya dan gaya pemformatan.

ParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles)

Mengonversi representasi rentang tanggal dan waktu yang ditentukan menjadi DateTime setara menggunakan format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus cocok dengan format yang ditentukan dengan tepat atau pengecualian dilemparkan.

ParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles)

Mengonversi representasi rentang tanggal dan waktu yang ditentukan menjadi DateTime setara menggunakan array format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus cocok dengan setidaknya salah satu format yang ditentukan dengan tepat atau pengecualian dilemparkan.

ParseExact(String, String, IFormatProvider)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan format yang ditentukan dan informasi format khusus budaya. Format representasi string harus sama persis dengan format yang ditentukan.

ParseExact(String, String, IFormatProvider, DateTimeStyles)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus cocok dengan format yang ditentukan dengan tepat atau pengecualian dilemparkan.

ParseExact(String, String[], IFormatProvider, DateTimeStyles)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan array format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus cocok dengan setidaknya salah satu format yang ditentukan dengan tepat atau pengecualian dilemparkan.

SpecifyKind(DateTime, DateTimeKind)

Membuat objek baru DateTime yang memiliki jumlah tick yang sama dengan yang ditentukan DateTime, tetapi ditetapkan sebagai waktu lokal, Waktu Universal Terkoordinasi (UTC), atau tidak keduanya, seperti yang ditunjukkan oleh nilai yang ditentukan DateTimeKind .

Subtract(DateTime)

Mengembalikan baru TimeSpan yang mengurangi tanggal dan waktu yang ditentukan dari nilai instans ini.

Subtract(TimeSpan)

Mengembalikan baru DateTime yang mengurangi durasi yang ditentukan dari nilai instans ini.

ToBinary()

Menserialisasikan objek saat ini DateTime ke nilai biner 64-bit yang kemudian dapat digunakan untuk membuat DateTime ulang objek.

ToFileTime()

Mengonversi nilai objek saat ini DateTime ke waktu file Windows.

ToFileTimeUtc()

Mengonversi nilai objek saat ini DateTime ke waktu file Windows.

ToLocalTime()

Mengonversi nilai objek saat ini DateTime ke waktu lokal.

ToLongDateString()

Mengonversi nilai objek saat ini DateTime ke representasi string tanggal panjang yang setara.

ToLongTimeString()

Mengonversi nilai objek saat ini DateTime ke representasi string waktu panjang yang setara.

ToOADate()

Mengonversi nilai instans ini ke tanggal Automasi OLE yang setara.

ToShortDateString()

Mengonversi nilai objek saat ini DateTime ke representasi string tanggal pendek yang setara.

ToShortTimeString()

Mengonversi nilai objek saat ini DateTime ke representasi string waktu pendek yang setara.

ToString()

Mengonversi nilai objek saat ini DateTime ke representasi string yang setara menggunakan konvensi pemformatan budaya saat ini.

ToString(IFormatProvider)

Mengonversi nilai objek saat ini DateTime ke representasi string yang setara menggunakan informasi format khusus budaya yang ditentukan.

ToString(String)

Mengonversi nilai objek saat ini DateTime ke representasi string yang setara menggunakan format yang ditentukan dan konvensi pemformatan budaya saat ini.

ToString(String, IFormatProvider)

Mengonversi nilai objek saat ini DateTime ke representasi string yang setara menggunakan format yang ditentukan dan informasi format khusus budaya.

ToUniversalTime()

Mengonversi nilai objek saat ini DateTime menjadi Waktu Universal Terkoordinasi (UTC).

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Mencoba memformat nilai instans saat ini sebagai UTF-8 ke dalam rentang byte yang disediakan.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Mencoba memformat nilai instans tanggalwaktu saat ini ke dalam rentang karakter yang disediakan.

TryParse(ReadOnlySpan<Char>, DateTime)

Mengonversi rentang karakter yang ditentukan dari tanggal dan waktu ke DateTime yang setara dan mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTime)

Mencoba mengurai rentang karakter menjadi nilai.

TryParse(ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime)

Mengonversi representasi rentang tanggal dan waktu ke DateTime yang setara menggunakan informasi format dan gaya pemformatan khusus budaya yang ditentukan, dan mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParse(String, DateTime)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara dan mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParse(String, IFormatProvider, DateTime)

Mencoba mengurai string ke dalam nilai.

TryParse(String, IFormatProvider, DateTimeStyles, DateTime)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan informasi format khusus budaya dan gaya pemformatan yang ditentukan, dan mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParseExact(ReadOnlySpan<Char>, ReadOnlySpan<Char>, IFormatProvider, DateTimeStyles, DateTime)

Mengonversi representasi rentang tanggal dan waktu yang ditentukan menjadi DateTime setara menggunakan format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus sama persis dengan format yang ditentukan. Metode mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParseExact(ReadOnlySpan<Char>, String[], IFormatProvider, DateTimeStyles, DateTime)

Mengonversi rentang karakter yang ditentukan dari tanggal dan waktu ke DateTime yang setara dan mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParseExact(String, String, IFormatProvider, DateTimeStyles, DateTime)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus sama persis dengan format yang ditentukan. Metode mengembalikan nilai yang menunjukkan apakah konversi berhasil.

TryParseExact(String, String[], IFormatProvider, DateTimeStyles, DateTime)

Mengonversi representasi string yang ditentukan dari tanggal dan waktu ke DateTime yang setara menggunakan array format yang ditentukan, informasi format khusus budaya, dan gaya. Format representasi string harus sama persis dengan setidaknya salah satu format yang ditentukan. Metode mengembalikan nilai yang menunjukkan apakah konversi berhasil.

Operator

Addition(DateTime, TimeSpan)

Menambahkan interval waktu tertentu ke tanggal dan waktu tertentu, menghasilkan tanggal dan waktu baru.

Equality(DateTime, DateTime)

Menentukan apakah dua instans DateTime yang ditentukan sama.

GreaterThan(DateTime, DateTime)

Menentukan apakah salah satu yang ditentukan DateTime lebih baru dari yang ditentukan DateTimelainnya.

GreaterThanOrEqual(DateTime, DateTime)

Menentukan apakah salah satu yang ditentukan DateTime mewakili tanggal dan waktu yang sama dengan atau lebih baru dari yang ditentukan DateTimelainnya.

Inequality(DateTime, DateTime)

Menentukan apakah dua instans DateTime yang ditentukan tidak sama.

LessThan(DateTime, DateTime)

Menentukan apakah satu yang ditentukan DateTime lebih lama dari yang lain yang ditentukan DateTime.

LessThanOrEqual(DateTime, DateTime)

Menentukan apakah salah satu yang ditentukan DateTime mewakili tanggal dan waktu yang sama dengan atau lebih lama dari yang ditentukan DateTimelainnya.

Subtraction(DateTime, DateTime)

Mengurangi tanggal dan waktu tertentu dari tanggal dan waktu tertentu lainnya dan mengembalikan interval waktu.

Subtraction(DateTime, TimeSpan)

Mengurangi interval waktu tertentu dari tanggal dan waktu tertentu dan mengembalikan tanggal dan waktu baru.

Implementasi Antarmuka Eksplisit

IComparable.CompareTo(Object)

Membandingkan instans saat ini dengan objek lain dengan jenis yang sama dan mengembalikan bilangan bulat yang menunjukkan apakah instans saat ini mendahului, mengikuti, atau terjadi dalam posisi yang sama dalam urutan pengurutan seperti objek lainnya.

IConvertible.GetTypeCode()

Mengembalikan untuk instans TypeCode ini.

IConvertible.ToBoolean(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToByte(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToChar(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToDateTime(IFormatProvider)

Mengembalikan objek saat ini DateTime .

IConvertible.ToDecimal(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToDouble(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToInt16(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToInt32(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToInt64(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToSByte(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToSingle(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToType(Type, IFormatProvider)

Mengonversi objek saat ini DateTime menjadi objek dari tipe yang ditentukan.

IConvertible.ToUInt16(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToUInt32(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

IConvertible.ToUInt64(IFormatProvider)

Konversi ini tidak didukung. Mencoba menggunakan metode ini melempar InvalidCastException.

ISerializable.GetObjectData(SerializationInfo, StreamingContext)

Mengisi objek dengan data yang SerializationInfo diperlukan untuk menserialisasikan objek saat ini DateTime .

Berlaku untuk

Keamanan Thread

Semua anggota jenis ini aman untuk utas. Anggota yang tampaknya memodifikasi status instans benar-benar mengembalikan instans baru yang diinisialisasi dengan nilai baru. Seperti halnya jenis lain, membaca dan menulis ke variabel bersama yang berisi instans jenis ini harus dilindungi oleh kunci untuk menjamin keamanan utas.

Lihat juga