Instrukcje: wyświetlanie milisekund w wartościach daty i godziny
Domyślne metody formatowania daty i czasu, takie jak DateTime.ToString(), zawierają godziny, minuty i sekundy wartości czasu, ale wykluczają składnik milisekund. W tym artykule pokazano, jak uwzględnić składnik daty i godziny w sformatowanych ciągach daty i godziny.
Aby wyświetlić składnik milisekund wartości DateTime
Jeśli pracujesz z reprezentacją ciągu daty, przekonwertuj ją na DateTime wartość lub DateTimeOffset przy użyciu metody lub statycznejDateTime.Parse(String).DateTimeOffset.Parse(String)
Aby wyodrębnić ciąg reprezentujący składnik milisekundowy godziny, wywołaj metodę lub wartość DateTime.ToString(String) daty i godziny, a następnie przekaż
fff
sam wzorzec formatu niestandardowego lubFFF
z innymi specyfikatorami formatu niestandardowego jako parametruformat
ToString.
Napiwek
Właściwość System.Globalization.NumberFormatInfo.NumberDecimalSeparator określa separator milisekund.
Przykład
W przykładzie przedstawiono składnik milisekund wartości i DateTimeDateTimeOffset dla konsoli, sam i uwzględniony w dłuższym ciągu daty i godziny.
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
Wzorzec formatu fff
zawiera dowolne zera końcowe w wartościach milisekund. Wzorzec formatu FFF
pomija je. Poniższy przykład ilustruje różnicę:
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
Problem z definiowaniem pełnego specyfikatora formatu niestandardowego, który zawiera składnik milisekund daty i godziny, polega na tym, że definiuje zakodowany format, który może nie odpowiadać układowi elementów czasu w bieżącej kulturze aplikacji. Lepszą alternatywą jest pobranie jednej daty i czasu wyświetlającej wzorzec określony przez obiekt bieżącej kultury DateTimeFormatInfo i zmodyfikować go, aby uwzględniał milisekundy. Ten przykład ilustruje takie podejście. Pobiera wzorzec daty i godziny bieżącej kultury z DateTimeFormatInfo.FullDateTimePattern właściwości , a następnie wstawia wzorzec fff
niestandardowy wraz z separatorem milisekund bieżącej kultury. W przykładzie użyto wyrażenia regularnego do wykonania tej operacji w ramach pojedynczego wywołania metody.
Aby wyświetlić część ułamkową sekund innych niż milisekund można określić specyfikator formatu niestandardowego. Na przykład f
specyfikator formatu niestandardowego lub F
wyświetla dziesiąte części sekundy, ff
specyfikator formatu niestandardowego lub FF
wyświetla setne części sekundy, a ffff
specyfikator formatu niestandardowego lub FFFF
wyświetla dziesięć tysięcznych części sekundy. Części ułamkowe milisekund są obcinane w zwracanym ciągu zamiast zaokrąglane. Te specyfikatory formatu są używane w poniższym przykładzie:
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
Uwaga
Można wyświetlić bardzo małe jednostki ułamkowe sekundy, takie jak dziesięć tysięcznych części sekundy lub setek tysięcy sekundy. Jednak te wartości mogą nie być znaczące. Precyzja wartości daty i godziny zależy od rozdzielczości zegara systemu operacyjnego. Aby uzyskać więcej informacji, zobacz interfejs API używany przez system operacyjny:
- Windows 7: GetSystemTimeAsFileTime
- System Windows 8 lub nowszy: GetSystemTimePreciseAsFileTime
- Linux i macOS: clock_gettime