Bagikan melalui


Cara: Menampilkan milidetik dalam nilai tanggal dan waktu

Metode pemformatan tanggal dan waktu default, seperti DateTime.ToString(), menyertakan jam, menit, dan detik dari nilai waktu tetapi mengecualikan komponen milidetiknya. Artikel ini memperlihatkan cara menyertakan komponen tanggal dan waktu milidetik dalam string tanggal dan waktu yang diformat.

Untuk menampilkan komponen milidetik dari nilai DateTime

  1. Jika Anda bekerja dengan representasi string tanggal, konversikan ke nilai DateTime atau DateTimeOffset dengan menggunakan metode DateTime.Parse(String) atau DateTimeOffset.Parse(String) statis.

  2. Untuk mengekstrak representasi string komponen milidetik waktu, panggil nilai DateTime.ToString(String) atau ToString metode tanggal dan waktu, dan teruskan fff pola atau FFF format kustom saja atau dengan penentu format kustom lainnya sebagai format parameter.

Tip

Properti System.Globalization.NumberFormatInfo.NumberDecimalSeparator menentukan pemisah milidetik.

Contoh

Contoh menampilkan komponen milidetik dari dan DateTimeDateTimeOffset nilai ke konsol, sendirian dan disertakan dalam string tanggal dan waktu yang lebih lama.

using System.Globalization;
using System.Text.RegularExpressions;

string dateString = "7/16/2008 8:32:45.126 AM";

try
{
    DateTime dateValue = DateTime.Parse(dateString);
    DateTimeOffset dateOffsetValue = DateTimeOffset.Parse(dateString);

    // Display Millisecond component alone.
    Console.WriteLine("Millisecond component only: {0}",
                    dateValue.ToString("fff"));
    Console.WriteLine("Millisecond component only: {0}",
                    dateOffsetValue.ToString("fff"));

    // Display Millisecond component with full date and time.
    Console.WriteLine("Date and Time with Milliseconds: {0}",
                    dateValue.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
    Console.WriteLine("Date and Time with Milliseconds: {0}",
                    dateOffsetValue.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));

    string fullPattern = DateTimeFormatInfo.CurrentInfo.FullDateTimePattern;
    
    // Create a format similar to .fff but based on the current culture.
    string millisecondFormat = $"{NumberFormatInfo.CurrentInfo.NumberDecimalSeparator}fff";

    // Append millisecond pattern to current culture's full date time pattern.
    fullPattern = Regex.Replace(fullPattern, "(:ss|:s)", $"$1{millisecondFormat}");

    // Display Millisecond component with modified full date and time pattern.
    Console.WriteLine("Modified full date time pattern: {0}",
                    dateValue.ToString(fullPattern));
    Console.WriteLine("Modified full date time pattern: {0}",
                    dateOffsetValue.ToString(fullPattern));
}
catch (FormatException)
{
    Console.WriteLine("Unable to convert {0} to a date.", dateString);
}
// The example displays the following output if the current culture is en-US:
//    Millisecond component only: 126
//    Millisecond component only: 126
//    Date and Time with Milliseconds: 07/16/2008 08:32:45.126 AM
//    Date and Time with Milliseconds: 07/16/2008 08:32:45.126 AM
//    Modified full date time pattern: Wednesday, July 16, 2008 8:32:45.126 AM
//    Modified full date time pattern: Wednesday, July 16, 2008 8:32:45.126 AM
Imports System.Globalization
Imports System.Text.REgularExpressions

Module MillisecondDisplay
    Public Sub Main()

        Dim dateString As String = "7/16/2008 8:32:45.126 AM"

        Try
            Dim dateValue As Date = Date.Parse(dateString)
            Dim dateOffsetValue As DateTimeOffset = DateTimeOffset.Parse(dateString)

            ' Display Millisecond component alone.
            Console.WriteLine("Millisecond component only: {0}", _
                              dateValue.ToString("fff"))
            Console.WriteLine("Millisecond component only: {0}", _
                              dateOffsetValue.ToString("fff"))

            ' Display Millisecond component with full date and time.
            Console.WriteLine("Date and Time with Milliseconds: {0}", _
                              dateValue.ToString("MM/dd/yyyy hh:mm:ss.fff tt"))
            Console.WriteLine("Date and Time with Milliseconds: {0}", _
                              dateOffsetValue.ToString("MM/dd/yyyy hh:mm:ss.fff tt"))

            Dim fullPattern As String = DateTimeFormatInfo.CurrentInfo.FullDateTimePattern

            ' Create a format similar to .fff but based on the current culture.
            Dim millisecondFormat as String = $"{NumberFormatInfo.CurrentInfo.NumberDecimalSeparator}fff"
            
            ' Append millisecond pattern to current culture's full date time pattern.
            fullPattern = Regex.Replace(fullPattern, "(:ss|:s)", $"$1{millisecondFormat}")

            ' Display Millisecond component with modified full date and time pattern.
            Console.WriteLine("Modified full date time pattern: {0}", _
                              dateValue.ToString(fullPattern))
            Console.WriteLine("Modified full date time pattern: {0}", _
                              dateOffsetValue.ToString(fullPattern))
        Catch e As FormatException
            Console.WriteLine("Unable to convert {0} to a date.", dateString)
        End Try
    End Sub
End Module
' The example displays the following output if the current culture is en-US:
'    Millisecond component only: 126
'    Millisecond component only: 126
'    Date and Time with Milliseconds: 07/16/2008 08:32:45.126 AM
'    Date and Time with Milliseconds: 07/16/2008 08:32:45.126 AM
'    Modified full date time pattern: Wednesday, July 16, 2008 8:32:45.126 AM
'    Modified full date time pattern: Wednesday, July 16, 2008 8:32:45.126 AM

Pola fff format mencakup nol berikutnya dalam nilai milidetik. Pola FFF format menekannya. Contoh berikut mengilustrasikan perbedaannya:

DateTime dateValue = new DateTime(2008, 7, 16, 8, 32, 45, 180);
Console.WriteLine(dateValue.ToString("fff"));
Console.WriteLine(dateValue.ToString("FFF"));
// The example displays the following output to the console:
//    180
//    18
Dim dateValue As New Date(2008, 7, 16, 8, 32, 45, 180)
Console.WriteLIne(dateValue.ToString("fff"))
Console.WriteLine(dateValue.ToString("FFF"))
' The example displays the following output to the console:
'    180
'    18

Masalah dengan menentukan penentu format kustom lengkap yang mencakup komponen milidetik dari tanggal dan waktu adalah menentukan format yang dikodekan secara permanen yang mungkin tidak sesuai dengan pengaturan elemen waktu dalam budaya aplikasi saat ini. Alternatif yang lebih baik adalah mengambil salah satu pola tampilan tanggal dan waktu yang ditentukan oleh objek budaya DateTimeFormatInfo saat ini dan memodifikasinya untuk menyertakan milidetik. Contoh berikut menggambarkan pendekatan ini. Ini mengambil pola tanggal dan waktu penuh budaya saat ini dari DateTimeFormatInfo.FullDateTimePattern properti dan kemudian menyisipkan pola fff kustom bersama dengan pemisah milidetik budaya saat ini. Contohnya menggunakan regex untuk melakukan operasi ini dalam satu panggilan metode.

Anda juga dapat menggunakan penentu format kustom untuk menampilkan bagian pecahan detik selain milidetik. Misalnya, penentu f format kustom atau F menampilkan persepuluh detik, ff atau FF penentu format kustom menampilkan seratus detik, dan ffff atau FFFF penentu format kustom menampilkan sepuluh ribu detik. Bagian pecahan milidetik dipotong alih-alih dibulatkan dalam string yang dikembalikan. Penentu format ini digunakan dalam contoh berikut:

DateTime dateValue = new DateTime(2008, 7, 16, 8, 32, 45, 180);
Console.WriteLine("{0} seconds", dateValue.ToString("s.f"));
Console.WriteLine("{0} seconds", dateValue.ToString("s.ff"));
Console.WriteLine("{0} seconds", dateValue.ToString("s.ffff"));
// The example displays the following output to the console:
//    45.1 seconds
//    45.18 seconds
//    45.1800 seconds
Dim dateValue As New DateTime(2008, 7, 16, 8, 32, 45, 180)
Console.WriteLine("{0} seconds", dateValue.ToString("s.f"))
Console.WriteLine("{0} seconds", dateValue.ToString("s.ff"))
Console.WriteLine("{0} seconds", dateValue.ToString("s.ffff"))
' The example displays the following output to the console:
'    45.1 seconds
'    45.18 seconds
'    45.1800 seconds

Catatan

Dimungkinkan untuk menampilkan unit pecahan yang sangat kecil dari detik, seperti sepuluh ribu detik atau seratus ribu detik. Namun, nilai-nilai ini mungkin tidak bermakna. Presisi nilai tanggal dan waktu tergantung pada resolusi jam sistem operasi. Untuk informasi selengkapnya, lihat API yang digunakan sistem operasi Anda:

Lihat juga