Procedure: Milliseconden weergeven in datum- en tijdwaarden

De standaardmethode voor datum- en tijdnotatie, zoals DateTime.ToString()de uren, minuten en seconden van een tijdwaarde, maar sluit het onderdeel milliseconden uit. In dit artikel wordt beschreven hoe u een millisecondenonderdeel van een datum en tijd kunt opnemen in opgemaakte datum- en tijdtekenreeksen.

Het onderdeel milliseconden van een Datum/tijd-waarde weergeven

  1. Als u met de tekenreeksweergave van een datum werkt, converteert u deze naar een DateTime of een DateTimeOffset waarde met behulp van de statische DateTime.Parse(String) of DateTimeOffset.Parse(String) methode.

  2. Als u de tekenreeksweergave van het millisecondenonderdeel van een tijd wilt extraheren, roept u de datum- en tijdwaarde DateTime.ToString(String) of ToString -methode aan en geeft u het patroon of FFF de fff aangepaste notatie alleen door of met andere aangepaste notatieaanduidingen als de format parameter.

Tip

De System.Globalization.NumberFormatInfo.NumberDecimalSeparator eigenschap geeft het scheidingsteken voor milliseconden op.

Opmerking

In het voorbeeld wordt het onderdeel milliseconden van een DateTime en een DateTimeOffset waarde voor de console weergegeven, alleen en opgenomen in een langere datum- en tijdtekenreeks.

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

Het fff notatiepatroon bevat eventuele volgnullen in de millisecondenwaarde. Het FFF indelingspatroon onderdrukt ze. In het volgende voorbeeld ziet u het verschil:

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

Een probleem met het definiëren van een volledige aangepaste notatieaanduiding die het onderdeel milliseconden van een datum en tijd bevat, is dat hiermee een in code vastgelegde indeling wordt gedefinieerd die mogelijk niet overeenkomt met de rangschikking van tijdelementen in de huidige cultuur van de toepassing. Een beter alternatief is om een van de datum- en tijdweergavepatronen op te halen die zijn gedefinieerd door het object van DateTimeFormatInfo de huidige cultuur en het te wijzigen in milliseconden. In het voorbeeld ziet u ook deze benadering. Het haalt het volledige datum- en tijdpatroon van de huidige cultuur op uit de DateTimeFormatInfo.FullDateTimePattern eigenschap en voegt vervolgens het aangepaste patroon fff samen met het scheidingsteken voor de huidige cultuur milliseconden in. In het voorbeeld wordt een reguliere expressie gebruikt om deze bewerking uit te voeren in één methode-aanroep.

U kunt ook een aangepaste notatieaanduiding gebruiken om een breukgedeelte van seconden weer te geven, behalve milliseconden. De aanduiding voor de of F aangepaste notatie geeft bijvoorbeeld f tienden van een seconde weer, de ff of FF aangepaste notatieaanduiding geeft honderdste van een seconde weer en de ffff of FFFF aangepaste notatieaanduiding geeft tien duizendde van een seconde weer. Breukdelen van een milliseconde worden afgekapt in plaats van afgerond in de geretourneerde tekenreeks. Deze indelingsaanduidingen worden gebruikt in het volgende voorbeeld:

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

Notitie

Het is mogelijk om zeer kleine breukeenheden van een seconde weer te geven, zoals tienduizendde van een seconde of honderdduizendste van een seconde. Deze waarden zijn echter mogelijk niet zinvol. De precisie van een datum- en tijdwaarde is afhankelijk van de resolutie van de klok van het besturingssysteem. Zie de API die uw besturingssysteem gebruikt voor meer informatie:

Zie ook