Útmutató: Ezredmásodperc megjelenítése dátum- és időértékekben

Az alapértelmezett dátum- és időformázási módszerek( például DateTime.ToString()az órák, percek és másodpercek) tartalmazzák az időértékeket, de kizárják annak ezredmásodperc-összetevőjét. Ez a cikk bemutatja, hogyan lehet egy dátum és idő ezredmásodperc összetevőjét formázott dátum- és idősztringekbe foglalni.

DateTime-érték ezredmásodpercben megadott összetevőjének megjelenítése

  1. Ha egy dátum sztring-ábrázolásával dolgozik, konvertálja azt egy vagy egy értékké DateTime a statikus DateTime.Parse(String) vagy DateTimeOffset.Parse(String) a metódus DateTimeOffset használatával.

  2. Az idő ezredmásodpercében lévő összetevő sztringképének kinyeréséhez hívja meg a dátum- és időérték vagy ToString -metódus értékétDateTime.ToString(String), és adja meg paraméterként format az fffFFF egyéni vagy egyéni formátummintát vagy más egyéni formátumjelölőket.

Tipp.

A System.Globalization.NumberFormatInfo.NumberDecimalSeparator tulajdonság az ezredmásodperc elválasztó értékét adja meg.

Példa

A példa egy és egy DateTimeOffset érték ezredmásodpercnyi összetevőjét DateTime jeleníti meg a konzolon, önmagában és egy hosszabb dátum- és idősztringben.

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

A fff formátumminta tartalmazza az ezredmásodpercben lévő záró nullákat. A FFF formátumminta letiltja őket. Az alábbi példa a különbséget szemlélteti:

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

Egy dátum és idő ezredmásodpercnyi összetevőjét tartalmazó teljes egyéni formátumkijelölő meghatározásával az a probléma, hogy egy olyan kemény kódolású formátumot határoz meg, amely nem felel meg az alkalmazás jelenlegi kultúrájában lévő időelemek elrendezésének. Egy jobb alternatíva az aktuális kultúra objektuma által definiált dátum- és időmegjelenítési minták egyikének lekérése DateTimeFormatInfo és módosítása ezredmásodpercre. A példa ezt a megközelítést is szemlélteti. Lekéri az aktuális kultúra teljes dátum- és időmintáját a DateTimeFormatInfo.FullDateTimePattern tulajdonságból, majd beszúrja az egyéni mintát fff az aktuális kultúra ezredmásodperc elválasztójával együtt. A példa egy reguláris kifejezéssel hajtja végre ezt a műveletet egyetlen metódushívásban.

Egyéni formátumkijelölővel másodpercek törtrészét is megjelenítheti az ezredmásodpercen kívül. Az egyéni vagy F az f egyéni formátumjelölő például a másodperc tizedét, az ffFF egyéni formátumjelölő pedig a másodpercek századát, az ffffFFFF egyéni formátumjelölő pedig a másodperc tizedét jeleníti meg. Az ezredmásodperc törtrészei csonkulnak a visszaadott sztringben való lekerekítés helyett. Ezeket a formátumjelölőket a következő példában használjuk:

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

Feljegyzés

Egy másodperc nagyon kis törtrészeit is megjelenítheti, például egy másodperc tízezredét vagy százezredét. Ezek az értékek azonban nem feltétlenül értelmezhetők. A dátum- és időérték pontossága az operációs rendszer órájának felbontásától függ. További információkért tekintse meg az operációs rendszer által használt API-t:

Lásd még