ಯುನಿಕ್ಸ್ ಸಮಯದ ಬಗ್ಗೆ ಪ್ರೋಗ್ರಾಮರ್‌ಗಳ ತಪ್ಪುಗ್ರಹಿಕೆಗಳು

ನಾನು ಕ್ಷಮೆ ಕೆಲುಥೇನೆ ಪ್ಯಾಟ್ರಿಕ್ ಮೆಕೆಂಜಿ.

ನಿನ್ನೆ ಡ್ಯಾನಿ ನಾನು ಯುನಿಕ್ಸ್ ಸಮಯದ ಬಗ್ಗೆ ಕೆಲವು ಆಸಕ್ತಿದಾಯಕ ಸಂಗತಿಗಳ ಬಗ್ಗೆ ಕೇಳಿದೆ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಅದು ಸಂಪೂರ್ಣವಾಗಿ ಅರ್ಥಹೀನವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ನಾನು ನೆನಪಿಸಿಕೊಂಡಿದ್ದೇನೆ.

ಈ ಮೂರು ಸಂಗತಿಗಳು ಅತ್ಯಂತ ಸಮಂಜಸ ಮತ್ತು ತಾರ್ಕಿಕವೆಂದು ತೋರುತ್ತದೆ, ಅಲ್ಲವೇ?

  1. Unix ಸಮಯವು ಜನವರಿ 1, 1970 00:00:00 UTC ರಿಂದ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆಯಾಗಿದೆ.
  2. ನೀವು ನಿಖರವಾಗಿ ಒಂದು ಸೆಕೆಂಡ್ ಕಾಯುತ್ತಿದ್ದರೆ, ಯುನಿಕ್ಸ್ ಸಮಯವು ನಿಖರವಾಗಿ ಒಂದು ಸೆಕೆಂಡ್ ಬದಲಾಗುತ್ತದೆ.
  3. Unix ಸಮಯ ಎಂದಿಗೂ ಹಿಂದಕ್ಕೆ ಚಲಿಸುವುದಿಲ್ಲ.

ಇದ್ಯಾವುದೂ ನಿಜವಲ್ಲ.

ಆದರೆ ವಿವರಿಸದೆ, "ಇದರಲ್ಲಿ ಯಾವುದೂ ನಿಜವಲ್ಲ" ಎಂದು ಸರಳವಾಗಿ ಹೇಳಲು ಸಾಕಾಗುವುದಿಲ್ಲ. ಏಕೆ. ವಿವರಣೆಗಳಿಗಾಗಿ ಕೆಳಗೆ ನೋಡಿ. ಆದರೆ ನೀವೇ ಯೋಚಿಸಲು ಬಯಸಿದರೆ, ಗಡಿಯಾರದ ಚಿತ್ರದ ಹಿಂದೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಬೇಡಿ!

ಯುನಿಕ್ಸ್ ಸಮಯದ ಬಗ್ಗೆ ಪ್ರೋಗ್ರಾಮರ್‌ಗಳ ತಪ್ಪುಗ್ರಹಿಕೆಗಳು
1770 ರ ದಶಕದ ಟೇಬಲ್ ಗಡಿಯಾರ. ಜಾನ್ ಲೆರೌಕ್ಸ್ ಅವರಿಂದ ಸಂಕಲಿಸಲಾಗಿದೆ. ಇಂದ ಸ್ವಾಗತ ಸಂಗ್ರಹಗಳು. ಪರವಾನಗಿ ಅಡಿಯಲ್ಲಿ ಪ್ರಕಟಿಸಲಾಗಿದೆ ಸಿಸಿ ಬೈ

ಎಲ್ಲಾ ಮೂರು ತಪ್ಪುಗ್ರಹಿಕೆಗಳು ಒಂದೇ ಕಾರಣವನ್ನು ಹೊಂದಿವೆ: ಅಧಿಕ ಸೆಕೆಂಡುಗಳು. ನಿಮಗೆ ಲೀಪ್ ಸೆಕೆಂಡ್‌ಗಳ ಪರಿಚಯವಿಲ್ಲದಿದ್ದರೆ, ತ್ವರಿತ ಉಲ್ಲೇಖ ಇಲ್ಲಿದೆ:

UTC ಸಮಯವನ್ನು ಎರಡು ಅಂಶಗಳಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ:

  • ಅಂತರರಾಷ್ಟ್ರೀಯ ಪರಮಾಣು ಸಮಯ: ಪ್ರಪಂಚದಾದ್ಯಂತ ನೂರಾರು ಪರಮಾಣು ಗಡಿಯಾರಗಳಿಂದ ಸರಾಸರಿ ವಾಚನಗೋಷ್ಠಿಗಳು. ಪರಮಾಣುವಿನ ವಿದ್ಯುತ್ಕಾಂತೀಯ ಗುಣಲಕ್ಷಣಗಳಿಂದ ನಾವು ಎರಡನೆಯದನ್ನು ಅಳೆಯಬಹುದು ಮತ್ತು ಇದು ವಿಜ್ಞಾನಕ್ಕೆ ತಿಳಿದಿರುವ ಸಮಯದ ಅತ್ಯಂತ ನಿಖರವಾದ ಮಾಪನವಾಗಿದೆ.
  • ವಿಶ್ವ ಸಮಯ, ತನ್ನದೇ ಆದ ಅಕ್ಷದ ಸುತ್ತ ಭೂಮಿಯ ತಿರುಗುವಿಕೆಯ ಆಧಾರದ ಮೇಲೆ. ಒಂದು ಪೂರ್ಣ ಕ್ರಾಂತಿ ಒಂದು ದಿನ.

ಸಮಸ್ಯೆಯೆಂದರೆ ಈ ಎರಡು ಸಂಖ್ಯೆಗಳು ಯಾವಾಗಲೂ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಭೂಮಿಯ ತಿರುಗುವಿಕೆಯು ಸ್ಥಿರವಾಗಿಲ್ಲ - ಇದು ಕ್ರಮೇಣ ನಿಧಾನಗೊಳ್ಳುತ್ತದೆ, ಆದ್ದರಿಂದ ಸಾರ್ವತ್ರಿಕ ಸಮಯದ ದಿನಗಳು ದೀರ್ಘವಾಗುತ್ತವೆ. ಮತ್ತೊಂದೆಡೆ, ಪರಮಾಣು ಗಡಿಯಾರಗಳು ಲಕ್ಷಾಂತರ ವರ್ಷಗಳಿಂದ ದೆವ್ವದ ನಿಖರ ಮತ್ತು ಸ್ಥಿರವಾಗಿರುತ್ತವೆ.

ಎರಡು ಬಾರಿ ಸಿಂಕ್‌ನಿಂದ ಹೊರಬಿದ್ದಾಗ, ಅವುಗಳನ್ನು ಮತ್ತೆ ಸಿಂಕ್‌ಗೆ ತರಲು ಯುಟಿಸಿಯಿಂದ ಸೆಕೆಂಡ್ ಅನ್ನು ಸೇರಿಸಲಾಗುತ್ತದೆ ಅಥವಾ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. 1972 ರಿಂದ ಸೇವೆ IERS (ಇದು ಈ ಪ್ರಕರಣವನ್ನು ನಡೆಸುತ್ತದೆ) 27 ಹೆಚ್ಚುವರಿ ಸೆಕೆಂಡುಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ. ಫಲಿತಾಂಶವು 27 ಸೆಕೆಂಡುಗಳ ಅವಧಿಯೊಂದಿಗೆ 86 UTC ದಿನಗಳು. ಸೈದ್ಧಾಂತಿಕವಾಗಿ, 401 ಸೆಕೆಂಡುಗಳ (ಮೈನಸ್ ಒಂದು) ಅವಧಿಯೊಂದಿಗೆ ಒಂದು ದಿನ ಸಾಧ್ಯ. ಎರಡೂ ಆಯ್ಕೆಗಳು ಯುನಿಕ್ಸ್ ಸಮಯದ ಮೂಲಭೂತ ಊಹೆಗೆ ವಿರುದ್ಧವಾಗಿವೆ.

Unix ಸಮಯವು ಪ್ರತಿ ದಿನವು ಯಾವುದೇ ಹೆಚ್ಚುವರಿ ಸೆಕೆಂಡುಗಳಿಲ್ಲದೆ ನಿಖರವಾಗಿ 86 ಸೆಕೆಂಡುಗಳು (400 × 60 × 60 = 24) ಇರುತ್ತದೆ ಎಂದು ಊಹಿಸುತ್ತದೆ. ಅಂತಹ ಜಂಪ್ ಸಂಭವಿಸಿದಲ್ಲಿ, ಯುನಿಕ್ಸ್ ಸಮಯವು ಒಂದು ಸೆಕೆಂಡಿಗೆ ಜಿಗಿಯುತ್ತದೆ ಅಥವಾ ಒಂದರಲ್ಲಿ ಎರಡು ಸೆಕೆಂಡುಗಳನ್ನು ಎಣಿಸುತ್ತದೆ. 86 ರ ಹೊತ್ತಿಗೆ, ಇದು 400 ಲೀಪ್ ಸೆಕೆಂಡುಗಳನ್ನು ಕಳೆದುಕೊಂಡಿದೆ.

ಆದ್ದರಿಂದ ನಮ್ಮ ತಪ್ಪುಗ್ರಹಿಕೆಗಳನ್ನು ಈ ಕೆಳಗಿನಂತೆ ಪೂರಕಗೊಳಿಸಬೇಕಾಗಿದೆ:

  • Unix ಸಮಯವು ಜನವರಿ 1, 1970 00:00:00 UTC ರಿಂದ ಸೆಕೆಂಡುಗಳ ಸಂಖ್ಯೆ ಮೈನಸ್ ಅಧಿಕ ಸೆಕೆಂಡುಗಳು.
  • ನೀವು ನಿಖರವಾಗಿ ಒಂದು ಸೆಕೆಂಡ್ ಕಾಯುತ್ತಿದ್ದರೆ, ಯುನಿಕ್ಸ್ ಸಮಯವು ನಿಖರವಾಗಿ ಒಂದು ಸೆಕೆಂಡ್ ಬದಲಾಗುತ್ತದೆ, ಅಧಿಕ ಸೆಕೆಂಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕದ ಹೊರತು.

    ಇಲ್ಲಿಯವರೆಗೆ, ಆಚರಣೆಯಲ್ಲಿ ಸೆಕೆಂಡುಗಳನ್ನು ಎಂದಿಗೂ ತೆಗೆದುಹಾಕಲಾಗಿಲ್ಲ (ಮತ್ತು ಭೂಮಿಯ ತಿರುಗುವಿಕೆಯ ನಿಧಾನಗತಿಯು ಇದು ಅಸಂಭವವಾಗಿದೆ ಎಂದರ್ಥ), ಆದರೆ ಅದು ಸಂಭವಿಸಿದಲ್ಲಿ, UTC ದಿನವು ಒಂದು ಸೆಕೆಂಡ್ ಕಡಿಮೆಯಾಗಲಿದೆ ಎಂದು ಅರ್ಥ. ಈ ಸಂದರ್ಭದಲ್ಲಿ, UTC ಯ ಕೊನೆಯ ಸೆಕೆಂಡ್ (23:59:59) ಅನ್ನು ತ್ಯಜಿಸಲಾಗುತ್ತದೆ.

    ಪ್ರತಿ Unix ದಿನವು ಒಂದೇ ಸಂಖ್ಯೆಯ ಸೆಕೆಂಡುಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ, ಆದ್ದರಿಂದ ಸಂಕ್ಷಿಪ್ತ ದಿನದ ಕೊನೆಯ Unix ಸೆಕೆಂಡ್ ಯಾವುದೇ UTC ಸಮಯಕ್ಕೆ ಹೊಂದಿಕೆಯಾಗುವುದಿಲ್ಲ. ಕಾಲು-ಸೆಕೆಂಡ್ ಮಧ್ಯಂತರಗಳಲ್ಲಿ ಅದು ಹೇಗೆ ಕಾಣುತ್ತದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ:

    ಯುನಿಕ್ಸ್ ಸಮಯದ ಬಗ್ಗೆ ಪ್ರೋಗ್ರಾಮರ್‌ಗಳ ತಪ್ಪುಗ್ರಹಿಕೆಗಳು

    ನೀವು 23:59:58:00 UTC ಗೆ ಪ್ರಾರಂಭಿಸಿ ಒಂದು ಸೆಕೆಂಡ್ ಕಾಯುತ್ತಿದ್ದರೆ, Unix ಸಮಯವು ಎರಡು UTC ಸೆಕೆಂಡುಗಳನ್ನು ಮುನ್ನಡೆಸುತ್ತದೆ ಮತ್ತು Unix 101 ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್ ಅನ್ನು ಯಾರಿಗೂ ನಿಯೋಜಿಸಲಾಗುವುದಿಲ್ಲ.

  • ಯುನಿಕ್ಸ್ ಸಮಯ ಎಂದಿಗೂ ಹಿಂತಿರುಗಲು ಸಾಧ್ಯವಿಲ್ಲ, ಒಂದು ಅಧಿಕ ಸೆಕೆಂಡ್ ಸೇರಿಸುವವರೆಗೆ.

    ಇದು ಪ್ರಾಯೋಗಿಕವಾಗಿ ಈಗಾಗಲೇ 27 ಬಾರಿ ಸಂಭವಿಸಿದೆ. UTC ದಿನದ ಕೊನೆಯಲ್ಲಿ, ಹೆಚ್ಚುವರಿ ಸೆಕೆಂಡ್ ಅನ್ನು 23:59:60 ಕ್ಕೆ ಸೇರಿಸಲಾಗುತ್ತದೆ. Unix ಒಂದು ದಿನದಲ್ಲಿ ಅದೇ ಸಂಖ್ಯೆಯ ಸೆಕೆಂಡುಗಳನ್ನು ಹೊಂದಿದೆ, ಆದ್ದರಿಂದ ಇದು ಹೆಚ್ಚುವರಿ ಸೆಕೆಂಡ್ ಅನ್ನು ಸೇರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ - ಬದಲಿಗೆ ಅದು ಕೊನೆಯ ಸೆಕೆಂಡಿಗೆ Unix ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್‌ಗಳನ್ನು ಪುನರಾವರ್ತಿಸಬೇಕಾಗುತ್ತದೆ. ಕಾಲು-ಸೆಕೆಂಡ್ ಮಧ್ಯಂತರಗಳಲ್ಲಿ ಅದು ಹೇಗೆ ಕಾಣುತ್ತದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ:

    ಯುನಿಕ್ಸ್ ಸಮಯದ ಬಗ್ಗೆ ಪ್ರೋಗ್ರಾಮರ್‌ಗಳ ತಪ್ಪುಗ್ರಹಿಕೆಗಳು

    ನೀವು 23:59:60.50 ಕ್ಕೆ ಪ್ರಾರಂಭಿಸಿ ಅರ್ಧ ಸೆಕೆಂಡ್ ಕಾಯುತ್ತಿದ್ದರೆ, ಯುನಿಕ್ಸ್ ಸಮಯ ಮರಳಿ ಬರುತ್ತದೆ ಅರ್ಧ ಸೆಕೆಂಡ್, ಮತ್ತು Unix 101 ಟೈಮ್‌ಸ್ಟ್ಯಾಂಪ್ ಎರಡು UTC ಸೆಕೆಂಡುಗಳಿಗೆ ಅನುರೂಪವಾಗಿದೆ.

ಇವುಗಳು ಬಹುಶಃ ಯುನಿಕ್ಸ್ ಕಾಲದ ವಿಚಿತ್ರತೆಗಳಲ್ಲ - ನಾನು ನಿನ್ನೆ ನೆನಪಿಸಿಕೊಂಡದ್ದು.

ಸಮಯ - ತುಂಬಾ ವಿಚಿತ್ರ ವಿಷಯ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ