Compartilhar via


Como: Exibir o componente de milissegundos de data e valores de hora

Os métodos de formatação padrão de data e hora, como DateTime.ToString(), incluem horas, minutos e segundos de uma valor de tempo, mas exclui seu componente de milissegundos. Este tópico mostra como incluir um componente de milissegundo de data e hora em sequências formatadas de data e hora.

Para exibir o componente de milissegundo de um valor datetime

  1. Se você estiver trabalhando com a representação de sequência de caracteres de uma data, converta-a em um valor DateTime ou um valor DateTimeOffset, usando os métodos estáticos DateTime.Parse(String) ou DateTimeOffset.Parse(String).

  2. Para extrair a representação de sequência de caracteres do componente tempo de milissegundo, chame a data e valor de tempo dos metódos DateTime.ToString(String) ou ToString e passar os padrões de formato personalizado fff ou FFFsozinhos ou com outros especificadores de formato personalizado como o parâmetro format.

Exemplo

O exemplo exibe o componente de milissegundo de um DateTime e um valor DateTimeOffset no console sozinho e incluído em uma sequência mais longa de data e hora.

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
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

O Formato padrãofff inclui os zeros à direita no valor de milissegundos. O Formato padrão FFF os suprime. A diferença é ilustrada no exemplo a seguir.

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      
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      

Um problema com definição de um especificador de formato personalizado completo que inclui o componente de milissegundo de uma data e hora é que ele define um formato embutido que pode não corresponder a organização de elementos de tempo na atual cultura do aplicativo. Uma alternativa melhor é recuperar um dos padrões de exibição de data e hora definidos pela cultura do atual do objeto DateTimeFormatInfo e modificá-lo para incluir milissegundos. O exemplo também ilustra essa abordagem. Ele recupera o padrão completo de data e hora da atual cultura através da propriedade DateTimeFormatInfo.FullDateTimePattern, então insere o padrão personalizado .ffff após seu padrão de segundos. Observe que o exemplo usa uma expressão regular para executar esta operação em uma única chamada de método.

Você também pode usar um especificador de formato personalizado para exibir uma parte fracionária de segundos que não seja milissegundos. Por exemplo, os especificadores de formato personalizado f ou F exibem décimos de segundo, os especificadores de formato personalizado ff ou FF exibem centésimos de segundos, e os especificadores de formato personalizado ffff ou FFFF exibem milésimos de segundos. Partes fracionários de um milissegundo são truncadas em vez de arredondadas na sequência de caracteres retornada. Esses especificadores de formato são usados no exemplo a seguir.

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
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

Observação

É possível exibir unidades fracionárias muito pequenas de um segundo, como dez milésimos de um segundo ou centenas de milésimos de um segundo.No entanto, esses valores podem não ser significativos.A precisão dos valores de data e hora dependem da resolução em relação ao relógio do sistema.No Windows NT 3.5 e versões posteriores, e sistemas operacionais Windows Vista, a resolução do relógio é aproximadamente 10 a 15 milissegundos.

Compilando o código

Compile o código na linha de comando usando o CSC ou vb.exe. Para compilar o código em Visual Studio, colocá-lo no modelo de projeto do console um aplicativo.

Consulte também

Referência

DateTimeFormatInfo

Conceitos

Sequências de Caracteres de Formato Personalizado de Data e Hora