2016-10-05 9 views
10

Zgodnie z polem cplusplus.com, tm_sec struktura przyjmuje wartości od 0 do 61 w C90 i wartości od 0 do 60 w C99 i później.Jaki jest cel 61 w polu tm_sec ze struktury TM

Wiem, że 60 można wykorzystać do wyrażenia sekundy przestępnej, ale co z drugim (mam na myśli 61)? I dlaczego zdecydowali się go usunąć?

Tak, otagowałem to zarówno C, jak i C++, ponieważ w tym przypadku jest to związane z obydwoma językami.

+1

Zostało to zapytane i udzielone w odpowiedzi na uwagi dotyczące [tej odpowiedzi] (http://stackoverflow.com/a/765780). – hvd

+6

@ πάντα ῥεῖ Czy mówisz poważnie? – FrozenHeart

+1

http://en.cppreference.com/w/c/chrono/tm#cite_note-leapsecond-1 możliwe wyjaśnienie – Creris

Odpowiedz

13

Zakres od 0 do 61 pozwala na maksymalnie 2 kolejne sekundy przestępne 31 grudnia danego roku, prawdopodobnie błędnie, ponieważ w latach, które wymagają 2 sekund przestępnych, nie są one dodawane w tym samym dniu.

Nowsze wersje standardu C poprawnie przyjmują, że w danym dniu może zostać wstawiona co najwyżej jedna sekunda przestępna.

Jak wyjaśniono szczegółowo w https://en.wikipedia.org/wiki/Leap_second sekundy są umieszczone w grudniu i/lub w czerwcu w celu uniknięcia dryft dłuższy niż 0,9 sekundy, a więc maksymalna wartość tm_sec należy 60 zamiast 61.

+0

Co, no wiesz, ma sens, ponieważ formalna definicja UTC nie zezwala na podwójne sekundy przestępne. Zobacz komentarze [tutaj] (http://stackoverflow.com/a/765780/102937). –

+0

@RobertHarvey: Zgadzam się, a odnośnik jest dość trafny, chociaż nie jest duplikatem. – chqrlie