Aracılığıyla paylaş


Nasıl yapılır: Milisaniyeleri tarih ve saat değerlerinde görüntüleme

DateTime.ToString() gibi varsayılan tarih ve saat biçimlendirme yöntemleri, bir zaman değerinin saatlerini, dakikalarını ve saniyelerini içerir ancak milisaniye bileşenini içermez. Bu makalede, biçimlendirilmiş tarih ve saat dizelerine bir tarih ve saatin milisaniye bileşeninin nasıl dahil olduğu gösterilmektedir.

Bir DateTime değerinin milisaniye bileşenini görüntülemek için

  1. Bir tarihin dize gösterimiyle çalışıyorsanız, statik DateTime.Parse(String) veya yöntemini kullanarak bunu bir DateTimeDateTimeOffset veya DateTimeOffset.Parse(String) değerine dönüştürün.

  2. Bir saatin milisaniyelik bileşeninin dize gösterimini ayıklamak için, tarih ve saat değerinin DateTime.ToString(String) veya ToString yöntemini çağırın ve veya FFF özel biçim desenini tek başına veya diğer özel biçim tanımlayıcılarıyla parametre olarak format geçirinfff.

İpucu

System.Globalization.NumberFormatInfo.NumberDecimalSeparator özelliği milisaniyelik ayırıcıyı belirtir.

Örnek

Örnek, bir ve DateTimeOffset değerinin DateTime milisaniyelik bileşenini konsolda tek başına görüntüler ve daha uzun bir tarih ve saat dizesine eklenir.

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

fff biçim deseni, milisaniye değerinin sonundaki sıfırları içerir. FFF biçim deseni bunları bastırır. Aşağıdaki örnekte fark gösterilmektedir:

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

Bir tarih ve saatin milisaniyelik bileşenini içeren tam bir özel biçim tanımlayıcısı tanımlamayla ilgili bir sorun, uygulamanın geçerli kültüründeki zaman öğelerinin düzenlemesine karşılık olmayan sabit kodlanmış bir biçim tanımlamasıdır. Daha iyi bir alternatif olarak geçerli kültürün DateTimeFormatInfo nesnesi tarafından tanımlanan tarih ve saat görüntüleme desenlerinden birini alıp milisaniye içerecek şekilde değiştirebilirsiniz. Örnek aynı zamanda bu yaklaşımı da gösterir. Özelliğinden geçerli kültürün tam tarih ve saat desenini DateTimeFormatInfo.FullDateTimePattern alır ve ardından özel deseni fff geçerli kültürün milisaniyelik ayırıcısıyla birlikte ekler. Örnek, bu işlemi tek bir yöntem çağrısında yapmak için normal bir ifade kullanır.

Saniyelerin milisaniye dışındaki kesirli bir kısmını görüntülemek için aynı zamanda özel bir biçim tanımlayıcısı da kullanabilirsiniz. Örneğin, f veya F özel biçim tanımlayıcısı saniyenin onda birini, ff veya FF özel biçim belirticisi saniyenin ffff yüzde birini, veya FFFF özel biçim tanımlayıcısı ise saniyenin on binde birini görüntüler. Bir milisaniyenin kesirli kısımları döndürülen dizede yuvarlanmak yerine kesilir. Bu biçim tanımlayıcıları aşağıdaki örnekte kullanılır:

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

Not

Saniyenin on binde biri veya saniyenin yüz binde biri gibi saniyenin çok küçük kesirli birimlerini görüntülemek mümkündür. Ancak, bu değerler anlamlı olmayabilir. Tarih ve saat değerinin duyarlığı, işletim sistemi saatinin çözünürlüğüne bağlıdır. Daha fazla bilgi için işletim sisteminizin kullandığı API'ye bakın:

Ayrıca bkz.