Compartilhar via


Método System.TimeSpan.Parse

Este artigo fornece comentários complementares à documentação de referência para esta API.

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

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

Elementos em colchetes ([ e ]) são opcionais. Uma seleção da lista de alternativas entre chaves ({ e }) e separada por barras verticais (|) é necessária. A tabela a seguir descreve cada elemento.

Elemento 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 (".").
Hh Horas, variando de 0 a 23.
: O símbolo separador de hora sensível à cultura. O formato invariável usa um caractere de dois-pontos (":").
milímetro Minutos, variando de 0 a 59.
ß Segundos opcionais, variando de 0 a 59.
. Um símbolo sensível à cultura que separa segundos de frações de segundo. O formato invariável usa um caractere de ponto (".").
Ff Segundos fracionários opcionais, consistindo de 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 estiverem presentes, os valores de cada componente de tempo deverão estar dentro de um intervalo especificado. Por exemplo, o valor de hh, o componente de horas, deve estar entre 0 e 23. Por 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 de horas, ele é interpretado como componente de dias.

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

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

Notas para 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, as operações de análise de sintaxe que têm êxito no .NET Framework 3.5 e em versões anteriores podem falhar e lançar um OverflowException no .NET Framework 4 e nas versões mais recentes. Em outros casos, as operações de análise que geram um erro FormatException no .NET Framework 3.5 e versões anteriores podem falhar e lançar um erro OverflowException 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($"{value} --> {interval}");
   }   
   catch (FormatException) {
      Console.WriteLine($"{value}: Bad Format");
   }   
   catch (OverflowException) {
      Console.WriteLine($"{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
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