2012-01-06 7 views
27

Con un Leap Second on the horizon for June this year, me pregunto si el .Net Framework tiene un segundo de conocimiento. El segundo extra se va a insertar después de que el último segundo del 30 de junio de manera UTC será oficialmente:¿Los métodos DateTime de .Net son capaces de reconocer un segundo bisieto?

2012 June 30,  23h 59m 59s 
2012 June 30,  23h 59m 60s 
2012 July 1,  0h 0m 0s 

es el marco .Net capaz de manejar esto? ¿Incluso importa si Windows is not Leap Second aware? ¿Afectará esto a las aplicaciones en mono que se ejecutan en O/S que son Leap Second aware?

EDIT:

Para ampliar esto un poco estoy imaginando un escenario en el que una solución basada en Java en Linux (que es consciente Segunda Salto) llama a un servicio Web .Net pasar en algo que es una marca de tiempo válida en Java, pero está fuera de los límites para .Net. ¿Hay algún marco que lo cubra (como Noda Time quizás)?

+3

Ver http://stackoverflow.com/questions/781370/are-leapseconds-taken-in-account-in-dotnet-or-c – afrischke

Respuesta

19

No -

Una sola garrapata representa cien nanosegundos o una diez millonésima parte de un segundo. Hay 10,000 tics en un milisegundo.

El valor de esta propiedad representa el número de intervalos de 100 nanosegundos que han transcurrido desde las 12:00:00 de la medianoche del 1 de enero de 0001, que representa DateTime.MinValue. No incluye la cantidad de marcas atribuibles a segundos intercalares.

Fuente: http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx

+4

que mueve el problema con "¿qué sucede cuando el reloj del sistema se recalibra en la * próxima * actualización NTP?" –

+2

@ Hans Passant: pregunta interesante. ¿Qué pasó con los relojes la última vez, el 31 de diciembre de 2008? –

8

.NET DateTime no tiene provisiones para los segundos intercalares, sino que simplemente confiar en el tiempo del sistema operativo. Windows ignora felizmente Leap Seconds (1)(2), por lo que solo tendrá la noción de tiempo tal como lo recibe de su maestro NTP (creo que el valor predeterminado para una máquina conectada sin dominio es time.windows.com), que probablemente esté sirviendo UTC incluyendo segundos intercalares.

Ver también mi respuesta a "Calculating Future Epoch Time in C#" que entra en más detalles.

  1. http://support.microsoft.com/kb/909614
  2. http://www.meinberg.de/english/info/leap-second.htm
Cuestiones relacionadas