2012-01-06 5 views
27

Con un Leap Second on the horizon for June this year mi sono chiesto se il framework .Net è consapevole del secondo? Il secondo in più deve essere inserito dopo l'ultimo secondo del 30 giugno in modo UTC sarà ufficialmente:I metodi DateTime di .Net sono in grado di riconoscere un secondo salto?

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

È il framework .Net in grado di gestire questo? Ha importanza anche se Windows is not Leap Second aware? Ciò influenzerà le app in mono in esecuzione su O/S che sono Leap Second aware?

EDIT:

Per espandere su questo un po 'mi sto immaginando uno scenario in cui una soluzione basata su Java su Linux (che è secondo intercalare a conoscenza) chiama un servizio Web .Net passando qualcosa che è un timestamp valido in Java ma è fuori dai limiti per .Net. Ci sono delle strutture che la supportano (come forse Noda Time)?

+3

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

risposta

19

No -

Un unico segno di spunta rappresenta un centinaio di nanosecondi o di un dieci-milionesimo di secondo. Ci sono 10.000 zecche in un millisecondo.

Il valore di questa proprietà rappresenta il numero di intervalli di 100 nanosecondi che sono trascorsi da mezzanotte 12:00, 1 gennaio 0001, che rappresenta DateTime.MinValue. Non include il numero di zecche attribuibili ai secondi bisestili.

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

+4

che muove il problema a "cosa succede quando l'orologio del sistema viene ricalibrato sul * prossimo * aggiornamento NTP?" –

+2

@Hans Passant: domanda interessante. Cosa è successo agli orologi l'ultima volta, nel 31 dicembre 2008? –

8

.NET DateTime non ha fondi per Leap secondi, ma semplicemente fare affidamento sul tempo di sistema operativo. Windows è beatamente inconsapevole di Leap Seconds (1)(2), e quindi avrà solo la nozione di tempo così come lo riceve dal suo master NTP (credo che l'impostazione predefinita per una macchina non collegata al dominio sia time.windows.com), che probabilmente sta scontando UTC compresi i secondi bisestili.

Vedere anche la mia risposta a "Calculating Future Epoch Time in C#" che va in maggiori dettagli.

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