Unix టైమ్ గురించి ప్రోగ్రామర్ల అపోహలు

నేను క్షమాపణలు కోరుతున్నాను పాట్రిక్ మెకెంజీ.

నిన్న డానీ నేను Unix సమయం గురించి కొన్ని ఆసక్తికరమైన వాస్తవాల గురించి అడిగాను మరియు కొన్నిసార్లు ఇది పూర్తిగా అస్పష్టంగా పనిచేస్తుందని నేను గుర్తుచేసుకున్నాను.

ఈ మూడు వాస్తవాలు చాలా సహేతుకంగా మరియు తార్కికంగా అనిపిస్తాయి, కాదా?

  1. Unix సమయం అనేది జనవరి 1, 1970 00:00:00 UTC నుండి వచ్చిన సెకన్ల సంఖ్య.
  2. మీరు సరిగ్గా ఒక సెకను వేచి ఉంటే, Unix సమయం సరిగ్గా ఒక సెకను మారుతుంది.
  3. Unix సమయం ఎప్పుడూ వెనుకకు కదలదు.

ఇందులో నిజం లేదు.

కానీ వివరించకుండా “ఇదేమీ నిజం కాదు” అని చెప్పడం సరిపోదు. ఎందుకు. వివరణల కోసం క్రింద చూడండి. కానీ మీరు మీ కోసం ఆలోచించాలనుకుంటే, గడియారం యొక్క చిత్రాన్ని దాటి స్క్రోల్ చేయవద్దు!

Unix టైమ్ గురించి ప్రోగ్రామర్ల అపోహలు
1770ల నాటి టేబుల్ క్లాక్. జాన్ లెరౌక్స్ చేత సంకలనం చేయబడింది. నుండి వెల్‌కమ్ కలెక్షన్స్. లైసెన్స్ క్రింద ప్రచురించబడింది CC BY

మూడు అపోహలకు ఒకే కారణం ఉంది: లీపు సెకన్లు. మీకు లీప్ సెకన్ల గురించి తెలియకపోతే, ఇక్కడ శీఘ్ర సూచన ఉంది:

UTC సమయం రెండు కారకాలచే నిర్ణయించబడుతుంది:

  • అంతర్జాతీయ అణు సమయం: ప్రపంచవ్యాప్తంగా ఉన్న వందలాది అణు గడియారాల నుండి సగటు రీడింగ్‌లు. అణువు యొక్క విద్యుదయస్కాంత లక్షణాల ద్వారా మనం రెండవదాన్ని కొలవగలము మరియు ఇది శాస్త్రానికి తెలిసిన సమయం యొక్క అత్యంత ఖచ్చితమైన కొలత.
  • ప్రపంచ సమయం, దాని స్వంత అక్షం చుట్టూ భూమి యొక్క భ్రమణ ఆధారంగా. ఒక పూర్తి విప్లవం ఒక రోజు.

సమస్య ఏమిటంటే ఈ రెండు సంఖ్యలు ఎల్లప్పుడూ సరిపోలడం లేదు. భూమి యొక్క భ్రమణం స్థిరంగా లేదు - ఇది క్రమంగా నెమ్మదిస్తుంది, కాబట్టి సార్వత్రిక సమయంలో రోజులు ఎక్కువ అవుతాయి. మరోవైపు, పరమాణు గడియారాలు మిలియన్ల సంవత్సరాలలో దెయ్యంగా ఖచ్చితమైనవి మరియు స్థిరంగా ఉంటాయి.

రెండు సార్లు సమకాలీకరించబడనప్పుడు, వాటిని తిరిగి సమకాలీకరించడానికి UTC నుండి రెండవది జోడించబడుతుంది లేదా తీసివేయబడుతుంది. 1972 నుండి సేవ IERS (ఇది ఈ కేసును నడుపుతుంది) 27 అదనపు సెకన్లను జోడించింది. ఫలితం 27 సెకన్ల వ్యవధితో 86 UTC రోజులు. సిద్ధాంతపరంగా, 401 సెకన్ల (మైనస్ ఒకటి) వ్యవధితో ఒక రోజు సాధ్యమవుతుంది. రెండు ఎంపికలు Unix సమయం యొక్క ప్రాథమిక అంచనాకు విరుద్ధంగా ఉన్నాయి.

Unix సమయం ప్రతి రోజు ఖచ్చితంగా 86 సెకన్లు (400 × 60 × 60 = 24), అదనపు సెకన్లు లేకుండా ఉంటుందని ఊహిస్తుంది. అటువంటి జంప్ సంభవించినట్లయితే, అప్పుడు Unix సమయం ఒక సెకను దూకుతుంది లేదా ఒకదానిలో రెండు సెకన్లు లెక్కించబడుతుంది. 86 నాటికి, ఇది 400 లీప్ సెకన్లు లేదు.

కాబట్టి మన దురభిప్రాయాలను ఈ క్రింది విధంగా భర్తీ చేయాలి:

  • Unix సమయం అనేది జనవరి 1, 1970 00:00:00 UTC నుండి వచ్చిన సెకన్ల సంఖ్య మైనస్ లీపు సెకన్లు.
  • మీరు సరిగ్గా ఒక సెకను వేచి ఉంటే, Unix సమయం సరిగ్గా ఒక సెకను మారుతుంది, లీప్ సెకను తీసివేయకపోతే.

    ఇప్పటి వరకు, ఆచరణలో సెకన్లు ఎన్నడూ తీసివేయబడలేదు (మరియు భూమి యొక్క భ్రమణం మందగించడం అంటే ఇది అసంభవం), కానీ అది ఎప్పుడైనా జరిగితే, UTC రోజు ఒక సెకను తక్కువగా మారుతుందని అర్థం. ఈ సందర్భంలో, UTC (23:59:59) చివరి సెకను విస్మరించబడుతుంది.

    ప్రతి Unix రోజు ఒకే సంఖ్యలో సెకన్లను కలిగి ఉంటుంది, కాబట్టి సంక్షిప్త రోజులోని చివరి Unix సెకను ఏ UTC సమయానికి అనుగుణంగా ఉండదు. క్వార్టర్-సెకండ్ వ్యవధిలో ఇది ఎలా ఉంటుందో ఇక్కడ ఉంది:

    Unix టైమ్ గురించి ప్రోగ్రామర్ల అపోహలు

    మీరు 23:59:58:00 UTCకి ప్రారంభించి ఒక సెకను వేచి ఉంటే, Unix సమయం రెండు UTC సెకన్లు ముందుకు సాగుతుంది మరియు Unix 101 టైమ్‌స్టాంప్ ఎవరికీ కేటాయించబడదు.

  • Unix సమయం ఎన్నటికీ తిరిగి వెళ్ళదు, ఒక లీపు సెకను జోడించబడే వరకు.

    ఇది ఇప్పటికే 27 సార్లు ఆచరణలో జరిగింది. UTC రోజు ముగింపులో, 23:59:60 వద్ద అదనపు సెకను జోడించబడుతుంది. Unix ఒక రోజులో అదే సంఖ్యలో సెకన్లను కలిగి ఉంది, కనుక ఇది అదనపు సెకనును జోడించదు - బదులుగా ఇది చివరి సెకనుకు Unix టైమ్‌స్టాంప్‌లను పునరావృతం చేయాలి. క్వార్టర్-సెకండ్ వ్యవధిలో ఇది ఎలా ఉంటుందో ఇక్కడ ఉంది:

    Unix టైమ్ గురించి ప్రోగ్రామర్ల అపోహలు

    మీరు 23:59:60.50కి ప్రారంభించి, అర సెకను వేచి ఉంటే, Unix సమయం తిరిగి వస్తుంది అర సెకను, మరియు Unix 101 టైమ్‌స్టాంప్ రెండు UTC సెకన్లకు అనుగుణంగా ఉంటుంది.

ఇవి బహుశా యునిక్స్ కాలంలోని విచిత్రాలు మాత్రమే కాదు - నేను నిన్న గుర్తుచేసుకున్నవి.

సమయం - చాలా విచిత్రమైన విషయం.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి