2016-10-05 37 views
10

cplusplus.com, tm_sec alanına göre tm yapısından C90'da 0'dan 61'e ve C99'da 0'dan 60'a kadar değerler kabul eder.tm_s yapısından 61 tm_sec alanındaki amacın amacı

Biliyorum ki 60 saniye sonra ikinci saniyeyi ifade etmek için kullanılabilir, fakat diğeri (yani 61)? Ve neden onu kaldırmayı seçtiler?

Evet, hem C hem de C++ olarak etiketledim, çünkü bu durumda her iki dil de ilişkilidir.

+1

[Bu cevap] 'daki (http://stackoverflow.com/a/765780) hakkındaki yorumlarda sorulmuş ve yanıtlanmıştır. – hvd

+6

@ πάντα ῥεῖ Ciddi misin? – FrozenHeart

+1

http://en.cppreference.com/w/c/chrono/tm#cite_note-leapsecond-1 olası açıklama – Creris

cevap

13

0 - 61 aralığı, belirli bir yılın 31 Aralık tarihinde ardı ardına 2 art arda saniyeler süresine izin verir, muhtemelen yanlışlıkla 2 saniyelik saniye gerektiren yıllar içinde bunlar aynı gün eklenmez.

C Standardının daha yeni sürümleri, herhangi bir günde belirli bir zamanda en fazla bir saniyelik saniyenin ekleneceğini doğru bir şekilde varsayar.

zamanda https://en.wikipedia.org/wiki/Leap_second artık saniye detaylı olarak açıklandığı üzere 0.9 saniyeden daha uzun bir kaymaya önlemek amacıyla Aralık ve/ya da Haziran sokulur, bu nedenle tm_sec değeri en fazla 60 yerine 61 olmalıdır.

+0

UTC'nin resmi tanımı, çift sıçrama saniyesine izin vermediğinden, bildiğiniz anlam ifade eder. Yorumlara bakın (burada) (http://stackoverflow.com/a/765780/102937). –

+0

@RobertHarvey: Katılıyorum ve referans iki kat olmasına rağmen oldukça uygun. – chqrlie