如何:显示日期和时间值中的毫秒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.

显示的 DateTime 值的毫秒部分To display the millisecond component of a DateTime value

  1. 如果要使用日期的字符串表示形式,请使用静态 DateTimeDateTimeOffset 方法将其转换为 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 方法,并将 fffFFF 自定义格式模式单独传递,或与其他自定义格式说明符一起作为 format 参数传递。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

此示例展示了如何向控制台传递 DateTimeDateTimeOffset 值的毫秒部分(单独传递以及包含在更长的日期和时间字符串中传递)。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 属性检索当前区域性的完整日期和时间模式,再在秒模式后面插入自定义模式 .ffffIt 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. 例如,fF 自定义格式说明符显示十分之几秒,ffFF 自定义格式说明符显示百分之几秒,ffffFFFF 自定义格式说明符显示万分之几秒。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 Vista 操作系统上,时钟的分辨率大约为 10-15 毫秒。On Windows NT 3.5 and later, and Windows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds.

请参阅See also