2010-08-11 14 views
17

Abra una ventana de inspección¿Por qué DateTime.ToString ("h") causa una excepción?

new DateTime(2010,01,01).ToString("h") 

Da:

new DateTime(2010,01,01).ToString("h") produjo una excepción de tipo System.FormatException

embargo ...

new DateTime(2010,01,01).ToString("h ") 

Da: "12"

Entonces, ¿por qué un espacio adicional evita que ocurra esta excepción de formato? ¿Esto es un error?

+0

es un formato personalizado, por lo que no puede agregarlo sin espacio. –

Respuesta

38

Es porque cree que es standard format string en lugar de custom one, debido a que tiene un solo carácter.

Una mejor manera de arreglar esto es utilizar %:

string text = DateTime.Now.ToString("%h"); 

A partir de los documentos en las cadenas de formato personalizados:

Una cadena de formato de fecha y hora personalizado se compone de dos o más caracteres . Los métodos de formato de fecha y hora interpretan cualquier cadena de un solo carácter como formato estándar de fecha y hora cadena. Si no reconocen el carácter como un especificador de formato válido, lanzan una FormatException. Para el ejemplo , una cadena de formato que consta de solo del especificador "h" es interpretada como una fecha estándar y cadena de formato de tiempo . Sin embargo, en este caso particular , una excepción es lanzada porque no existe una "h" fecha estándar y formato de hora especificador.

Para utilizar cualquiera de los de fecha y hora especificadores de formato como el único especificador en una cadena de formato (es decir, de usar la "d", "f", "F", "G", " h ", " H "," K "," m "," M "," s "," t "," y ", " z ",": "o"/"formato personalizado especificador por sí mismo), incluya un espacio antes o después del especificador, o incluya un por ciento ("%") formato especificador antes del único especificador de fecha y hora personalizado .

Por ejemplo, "% h" se interpreta como un formato de cadena de fecha y hora encargo que muestra la hora representada por la fecha actual y el valor de tiempo. Usted también puede usar la cadena de formato "h" o "h" , aunque esto incluye un espacio en la cadena de resultados junto con la hora . El siguiente ejemplo ilustra estas tres cadenas de formato .

+0

Gracias Jon, supongo que tendría sentido. Estoy trabajando con: dte.ToString ("h") .Trim() por ahora para evitar el problema. –

+1

DateTime.Now.ToString ("% h") - eso funciona para mí, muchas gracias. ¡Debería haber leído el manual oficial en lugar de otros sitios web, supongo! –

Cuestiones relacionadas