Nasıl yapılır: Tarih ve Saat Değerlerinde Milisaniyeleri 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 konu, biçimlendirilen tarih ve saat dizelerine bir tarihin ve saatin milisaniye bileşeninin nasıl eklendiğini gösterir.

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

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

  2. Bir saatin milisaniye 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 fff veya FFF özel biçim desenini tek başına veya başka özel biçim tanımlayıcılarıyla birlikte format parametresi olarak geçirin.

Örnek

Bu örnek, her ikisi de tek başına olan ve daha uzun bir tarih ve saat dizesine eklenen bir DateTime ve bir DateTimeOffset değerine ait milisaniye bileşenini konsolda görüntüler.

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

public class MillisecondDisplay
{
   public static void Main()
   {
      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"));

         // Append millisecond pattern to current culture's full date time pattern
         string fullPattern = DateTimeFormatInfo.CurrentInfo.FullDateTimePattern;
         fullPattern = Regex.Replace(fullPattern, "(:ss|:s)", "$1.fff");

         // 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"))

            ' Append millisecond pattern to current culture's full date time pattern
            Dim fullPattern As String = DateTimeFormatInfo.CurrentInfo.FullDateTimePattern
            fullPattern = Regex.Replace(fullPattern, "(:ss|:s)", "$1.fff")

            ' 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. Fark, aşağıdaki örnekte gösterilmiştir.

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 saate ait milisaniye bileşenini içeren tam bir özel biçim tanımlayıcısını tanımlamadaki sorun, uygulamanın geçerli kültüründeki zaman öğelerinin düzenine karşılık gelmeyebilen sabit kodlanmış bir biçimi 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. DateTimeFormatInfo.FullDateTimePattern özelliğinden geçerli kültürün tam tarih ve saat desenini alır ve ardından saniye deseninin sonrasına .ffff özel desenini ekler. Bu işlemi tek bir yöntem çağrısında gerçekleştirmek için örneğin bir normal ifade kullandığını unutmayın.

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ı bir saniyenin onda birini, ff veya FF özel biçim tanımlayıcısı bir saniyenin yüzde birini ve ffff veya FFFF özel biçim tanımlayıcısı bir 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

Bir saniyenin on binde biri veya yüz binde biri gibi çok küçük kesirli birimlerini görüntülemek mümkündür. Ancak, bu değerler anlamlı olmayabilir. Bir tarih ve saat değerinin hassasiyeti, işletim sistemi saatinin çözümüne bağlıdır. Daha fazla bilgi için bkz. işletim sisteminizin kullandığı API.

Ayrıca bkz.