2009-05-27 15 views
8

Actualmente estoy en British summer time que es UTC +1 hora. Confirmé que mi PC es correcta con el siguiente código y devuelve verdadero.¿Por qué DateTime.Now.ToString ("u") no funciona?

System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now) 

Mi pregunta es entonces ¿por qué el formateador UTC no funciona lo que cabe esperar:

DateTime.Now.ToString("u") 

Devuelve la fecha actual del sistema exacto de la siguiente manera en formato UTC como se esperaba, pero con la Z (Zulu Time) al final no +01: 00?

decir

2009-05-27 14:21:22Z 

no

2009-05-27 14:21:22+01:00 

¿Es esta funcionalidad correcta?

Respuesta

18

estados de MSDN la siguientes:

Representa una cadena de fecha y formato de tiempo definido por la propiedad DateTimeFormatInfo.UniversalSortableDateTimePattern. El patrón refleja un estándar definido y la propiedad es de solo lectura. Por lo tanto, siempre es igual, independientemente de la cultura utilizada o del proveedor de formato suministrado. La cadena de formato personalizado es "aaaa" - "MM" - "dd HH": "mm": "ss'Z".

Cuando se usa este especificador de formato estándar, la operación de formateo o análisis utiliza siempre el cultivo invariable.

El formateo no convierte la zona horaria del objeto de fecha y hora. Por lo tanto, la aplicación debe convertir una fecha y hora en Hora Universal Coordinada (UTC) antes de usar este especificador de formato.

debería usar el siguiente código para convertir su actual fecha de UTC antes de formatearlo:

DateTime.UtcNow.ToString("u") 

o

DateTime.Now.ToUniversalTime().ToString("u") 

Para mostrar en el formato que espera (es decir, 2009- 05-27 14: 21: 22 + 01: 00), necesitaría usar un formato de fecha personalizado:

DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz"); 
+2

Gracias - ¡Realmente debería leer la documentación! – John

+2

Esto también funciona: 'DateTime.UtcNow.ToString (" u ");' –

5

"u" es el patrón de fecha/hora ordenable universal, no en formato UTC; Para citar el documentation:

Representa una cadena de fecha y formato de tiempo definido por el DateTimeFormatInfo .. :: propiedad UniversalSortableDateTimePattern.. El patrón refleja un estándar definido y la propiedad es de solo lectura. Por lo tanto, siempre es igual, independientemente de la cultura utilizada o del proveedor de formato suministrado. La cadena de formato personalizado es "aaaa" - "MM" - "dd HH": "mm": "ss'Z".

Cuando se usa este especificador de formato estándar, la operación de formateo o análisis utiliza siempre el cultivo invariable.

El formateo no convierte la zona horaria del objeto de fecha y hora.Por lo tanto, la aplicación debe convertir una fecha y hora en Hora Universal Coordinada (UTC) antes de usar este especificador de formato.

3

Debe utilizar DateTime.Now.ToUniversalTime(). ToString ("u").

Cuestiones relacionadas