Compartir a través de


Método System.TimeSpan.Parse

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

La cadena de entrada de los Parse métodos contiene una especificación de intervalo de tiempo con el formato :

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

Los elementos entre corchetes ([ y ]) son opcionales. Se requiere una selección de la lista de alternativas entre llaves ({ y }) y separadas por barras verticales (|). En esta tabla se describe cada elemento.

Elemento Descripción
ws Espacio en blanco opcional.
- Un signo menos opcional, que indica un valor negativo TimeSpan.
d Días comprendidos entre 0 y 10675199.
. Símbolo que distingue la referencia cultural que separa días de horas. El formato invariable usa un carácter de punto (".").
hh Horas, entre 0 y 23.
: Símbolo separador de tiempo que distingue la referencia cultural. El formato invariable usa un carácter de dos puntos (":").
mm Minutos, entre 0 y 59.
ss Segundos opcionales, entre 0 y 59.
. Símbolo que distingue la referencia cultural que separa los segundos de las fracciones de un segundo. El formato invariable usa un carácter de punto (".").
ff Fracciones opcionales de segundos, que constan de uno a siete dígitos decimales.

Si la cadena de entrada no es solo un valor de día, debe incluir un componente de horas y minutos; Otros componentes son opcionales. Si están presentes, los valores de cada componente de hora deben estar dentro de un intervalo especificado. Por ejemplo, el valor de hh, el componente hours, debe estar comprendido entre 0 y 23. Debido a esto, pasar "23:00:00" al Parse método devuelve un intervalo de tiempo de 23 horas. Por otro lado, pasar "24:00:00" devuelve un intervalo de tiempo de 24 días. Dado que "24" está fuera del intervalo del componente de horas, se interpreta como el componente days.

Los componentes de la cadena de entrada deben especificar colectivamente un intervalo de tiempo mayor o igual que TimeSpan.MinValue y menor o igual que TimeSpan.MaxValue.

El Parse(String) método intenta analizar la cadena de entrada mediante cada uno de los formatos específicos de la referencia cultural para la referencia cultural actual.

Notas a los autores de llamadas

Cuando un componente de intervalo de tiempo de la cadena que se va a analizar contiene más de siete dígitos, las operaciones de análisis en .NET Framework 3.5 y versiones anteriores pueden comportarse de forma diferente a las operaciones de análisis en .NET Framework 4 y versiones posteriores. En algunos casos, se pueden producir errores en las operaciones de análisis que se realizan correctamente en .NET Framework 3.5 y versiones anteriores y se produce un error OverflowException en .NET Framework 4 y versiones posteriores. En otros casos, es posible que se produzcan errores en las operaciones de análisis que producen en FormatException .NET Framework 3.5 y versiones anteriores y se produzca una OverflowException excepción en .NET Framework 4 y versiones posteriores. En el ejemplo siguiente se muestran ambos escenarios.

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