Sdílet prostřednictvím


Postupy: Zobrazení milisekund v hodnotách data a času

Výchozí metody pro formátování hodnot data a času, jako například DateTime.ToString(), zahrnují hodiny, minuty a sekundy příslušné časové hodnoty, ale neobsahují komponentu milisekund. Tento článek ukazuje, jak zahrnout komponentu data a času v milisekundách do formátovaných řetězců data a času.

Zobrazení komponenty milisekund hodnoty DateTime

  1. Pokud pracujete s řetězcovou reprezentací data, převeďte ho na DateTime hodnotu pomocí DateTimeOffset statické DateTime.Parse(String) nebo DateTimeOffset.Parse(String) metody.

  2. Chcete-li extrahovat řetězcovou reprezentaci komponenty milisekund času, zavolejte hodnotu data a času nebo DateTime.ToString(String)ToString metodu a předejte fffFFF samotný vzor vlastního formátu nebo s jinými specifikátory vlastního formátu jako format parametr.

Tip

Vlastnost System.Globalization.NumberFormatInfo.NumberDecimalSeparator určuje oddělovač milisekund.

Příklad

V příkladu se zobrazí komponenta milisekund a DateTimeDateTimeOffset hodnoty konzoly, která je samostatně a zahrnuta v delším řetězci data a času.

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

Vzor formátu fff zahrnuje všechny koncové nuly v hodnotě milisekund. Vzor formátu FFF je potlačí. Následující příklad znázorňuje rozdíl:

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

Problém s definováním kompletního specifikátoru vlastního formátu, který zahrnuje komponentu milisekund data a času, je, že definuje pevně zakódovaný formát, který nemusí odpovídat uspořádání časových prvků v aktuální jazykové verzi aplikace. Lepší alternativou je načíst jeden ze vzorů zobrazení data a času, které jsou definovány v objektu aktuální jazykové verze DateTimeFormatInfo, a upravit je tak, aby milisekundy obsahovaly. Tento příklad znázorňuje také tento přístup. Načte z vlastnosti vzor DateTimeFormatInfo.FullDateTimePattern úplného data a času aktuální jazykové verze a potom vloží vlastní vzor fff spolu s oddělovačem milisekund aktuální jazykové verze. V příkladu se k provedení této operace používá regulární výraz v jednom volání metody.

Pro zobrazení jiné části sekundového údaje než milisekund lze použít také specifikátor vlastního formátu. Specifikátor vlastního formátu například fF zobrazuje desetiny sekundy, ffFF specifikátor vlastního formátu zobrazí setiny sekundy a ffff specifikátor vlastního formátu nebo FFFF specifikátor vlastního formátu zobrazí desetitisíce sekundy. Zlomkové části milisekundy jsou ve vráceném řetězci namísto zaokrouhlení zkráceny. Tyto specifikátory formátu se používají v následujícím příkladu:

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

Poznámka:

Je možné zobrazit velmi malé desetinné jednotky sekundy, například desetitisíce sekundy nebo stotisíce sekundy. Tyto hodnoty ale nemusí být smysluplné. Přesnost hodnoty data a času závisí na rozlišení hodin operačního systému. Další informace najdete v rozhraní API, které váš operační systém používá:

Viz také