Método System.TimeSpan.Parse

Este artigo fornece observações complementares à documentação de referência para essa API.

A cadeia de caracteres de entrada para os Parse métodos contém uma especificação de intervalo de tempo no formato:

[ws][-]{ d | [d.]hh:mm[:ss[.ff]] }[ws]

Os elementos entre colchetes ([ e ]) são opcionais. É necessária uma seleção da lista de alternativas entre chaves ( e ) e }separadas por barras verticais ({|). A tabela a seguir descreve cada elemento.

Element Descrição
ws Espaço em branco opcional.
- Um sinal de subtração opcional, que indica um TimeSpan negativo.
d Dias, variando de 0 a 10675199.
. Um símbolo sensível à cultura que separa dias de horas. O formato invariável usa um caractere de ponto final (".").
hh Horas, variando de 0 a 23.
: O símbolo separador de hora sensível à cultura. O formato invariante usa um caractere de dois pontos (":").
mm Minutos, variando de 0 a 59.
ss Segundos opcionais, variando de 0 a 59.
. Um símbolo sensível à cultura que separa segundos de frações de um segundo. O formato invariável usa um caractere de ponto final (".").
ff Segundos fracionários opcionais, consistindo em um a sete dígitos decimais.

Se a cadeia de caracteres de entrada não for apenas um valor de dia, ela deverá incluir um componente de horas e minutos; outros componentes são opcionais. Se eles estiverem presentes, os valores de cada componente de tempo devem estar dentro de um intervalo especificado. Por exemplo, o valor de hh, o componente horas, deve estar entre 0 e 23. Devido a isso, passar "23:00:00" para o Parse método retorna um intervalo de tempo de 23 horas. Por outro lado, passar "24:00:00" retorna um intervalo de tempo de 24 dias. Como "24" está fora do intervalo do componente horas, ele é interpretado como o componente dias.

Os componentes da cadeia de caracteres de entrada devem especificar coletivamente um intervalo de tempo maior ou igual a e menor ou igual a TimeSpan.MinValueTimeSpan.MaxValue.

O Parse(String) método tenta analisar a cadeia de caracteres de entrada usando cada um dos formatos específicos de cultura para a cultura atual.

Notas aos chamadores

Quando um componente de intervalo de tempo na cadeia de caracteres a ser analisada contém mais de sete dígitos, as operações de análise no .NET Framework 3.5 e versões anteriores podem se comportar de forma diferente das operações de análise no .NET Framework 4 e versões posteriores. Em alguns casos, a análise de operações bem-sucedidas no .NET Framework 3.5 e versões anteriores pode falhar e lançar um OverflowException no .NET Framework 4 e posterior. Em outros casos, as operações de análise que lançam um no .NET Framework 3.5 e versões anteriores podem falhar e lançar um FormatExceptionOverflowException no .NET Framework 4 e posterior. O exemplo a seguir ilustra ambos os cenários.

string[] values = { "000000006", "12.12:12:12.12345678" };
foreach (string value in values)
{
   try {
      TimeSpan interval = TimeSpan.Parse(value);
      Console.WriteLine("{0} --> {1}", value, interval);
   }   
   catch (FormatException) {
      Console.WriteLine("{0}: Bad Format", value);
   }   
   catch (OverflowException) {
      Console.WriteLine("{0}: Overflow", value);
   }
}

// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format      
// Output from .NET Framework 4 and later versions or .NET Core:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow
open System

let values = [| "000000006"; "12.12:12:12.12345678" |]
for value in values do
    try
        let interval = TimeSpan.Parse value
        printfn $"{value} --> {interval}"   
    with
    | :? FormatException ->
        printfn $"{value}: Bad Format"
    | :? OverflowException ->
        printfn $"{value}: Overflow"

// Output from .NET Framework 3.5 and earlier versions:
//       000000006 --> 6.00:00:00
//       12.12:12:12.12345678: Bad Format      
// Output from .NET Framework 4 and later versions or .NET Core:
//       000000006: Overflow
//       12.12:12:12.12345678: Overflow
Dim values() As String = { "000000006", "12.12:12:12.12345678" }
For Each value As String In values
   Try
      Dim interval As TimeSpan = TimeSpan.Parse(value)
      Console.WriteLine("{0} --> {1}", value, interval)
   Catch e As FormatException
      Console.WriteLine("{0}: Bad Format", value)
   Catch e As OverflowException
      Console.WriteLine("{0}: Overflow", value)
   End Try         
Next
' Output from .NET Framework 3.5 and earlier versions:
'       000000006 --> 6.00:00:00
'       12.12:12:12.12345678: Bad Format      
' Output from .NET Framework 4:
'       000000006: Overflow
'       12.12:12:12.12345678: Overflow