Практическое руководство. Отображение миллисекунд в значениях даты и времениHow to: Display Milliseconds in Date and Time Values

Стандартные методы форматирования даты и времени, например DateTime.ToString(), поддерживают часы, минуты и секунды, но не миллисекунды.The default date and time formatting methods, such as DateTime.ToString(), include the hours, minutes, and seconds of a time value but exclude its milliseconds component. В этом разделе показано, как включить компонент миллисекунд даты и времени в форматированные строки даты и времени.This topic shows how to include a date and time's millisecond component in formatted date and time strings.

Отображение компонента миллисекунд для значения DateTimeTo display the millisecond component of a DateTime value

  1. Если вы работаете со строковым представлением даты, преобразуйте ее в значение типа DateTime или DateTimeOffset, используя статичный метод DateTime.Parse(String) или DateTimeOffset.Parse(String).If you are working with the string representation of a date, convert it to a DateTime or a DateTimeOffset value by using the static DateTime.Parse(String) or DateTimeOffset.Parse(String) method.

  2. Чтобы извлечь строковое представление компонента миллисекунд, вызовите метод DateTime.ToString(String)или ToString для значения даты и времени, передав ему в параметре format шаблон пользовательского формата fff или FFF, отдельно или с другим описателем пользовательского формата.To extract the string representation of a time's millisecond component, call the date and time value's DateTime.ToString(String) or ToString method, and pass the fff or FFF custom format pattern either alone or with other custom format specifiers as the format parameter.

ПримерExample

Этот пример выводит в консоль компонент миллисекунд DateTime и значение DateTimeOffset, как отдельно, так и в составе более длинной строки даты и времени.The example displays the millisecond component of a DateTime and a DateTimeOffset value to the console, both alone and included in a longer date and time string.

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 содержит конечные нули в значении миллисекунд.The fff format pattern includes any trailing zeros in the millisecond value. Шаблон формата FFF запрещает их.The FFF format pattern suppresses them. Эта разница показана в следующем примере.The difference is illustrated in the following example.

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      

Проблема с определением полного описателя пользовательского формата, содержащего компонент миллисекунд, состоит в том, что он жестко задает формат, который может не соответствовать взаимному расположению элементов времени в текущих региональных параметрах приложения.A problem with defining a complete custom format specifier that includes the millisecond component of a date and time is that it defines a hard-coded format that may not correspond to the arrangement of time elements in the application's current culture. Вместо этого лучше всего извлечь один из шаблонов отображения даты и времени, определенных текущим объектом языка и региональных параметров DateTimeFormatInfo, а затем изменить его для поддержки миллисекунд.A better alternative is to retrieve one of the date and time display patterns defined by the current culture's DateTimeFormatInfo object and modify it to include milliseconds. Этот подход также показан в примере.The example also illustrates this approach. Он извлекает шаблон полного отображения даты и времени для текущих языка и региональных параметров, обратившись к свойству DateTimeFormatInfo.FullDateTimePattern, а затем добавляет в него пользовательский шаблон .ffff после шаблона секунд.It retrieves the current culture's full date and time pattern from the DateTimeFormatInfo.FullDateTimePattern property, and then inserts the custom pattern .ffff after its seconds pattern. Обратите внимание, что в примере используется регулярное выражение для выполнения этой операции в одном методе.Note that the example uses a regular expression to perform this operation in a single method call.

Описатель настраиваемого формата также используется для отображения дробной части секунд, отличной от миллисекунд.You can also use a custom format specifier to display a fractional part of seconds other than milliseconds. Например, описатель пользовательского формата f или F отображает десятые доли секунды, описатель ff или FF — сотые доли секунды, а описатель ffff или FFFF — десятитысячные доли секунды.For example, the f or F custom format specifier displays tenths of a second, the ff or FF custom format specifier displays hundredths of a second, and the ffff or FFFF custom format specifier displays ten thousandths of a second. Дробные части миллисекунд усекаются, а не округляются в возвращаемой строке.Fractional parts of a millisecond are truncated instead of rounded in the returned string. Эти описатели формата используются в следующем примере.These format specifiers are used in the following example.

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

Примечание

Существует возможность отображать малые дробные части секунды, например десятитысячные или стотысячные доли секунды.It is possible to display very small fractional units of a second, such as ten thousandths of a second or hundred-thousandths of a second. Однако эти значения могут не иметь смысла.However, these values may not be meaningful. Точность значений даты и времени зависит от разрешения системных часов.The precision of date and time values depends on the resolution of the system clock. В операционных системах Windows NT, начиная с версии 3.5, и Windows VistaWindows Vista, разрешение часов приблизительно соответствует 10–15 миллисекундам.On Windows NT 3.5 and later, and Windows VistaWindows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds.

См. такжеSee also