अपने Mac पर UTC टाइमस्टैम्प से सटीक संख्या में घंटे घटाने के लिए, उसे उसके UTC ऑफ़सेट के साथ पार्स करें, अवधि घटाएँ और आउटपुट को स्पष्ट रूप से UTC में लिखें। यह Terminal वर्कफ़्लो Python और प्रकाशन की एक काल्पनिक तारीख का उपयोग करता है।

यहाँ काम स्पष्ट है: प्रकाशन के टाइमस्टैम्प को गैर-ऋणात्मक पूर्ण घंटों की संख्या से पीछे ले जाना और इनपुट तथा आउटपुट, दोनों को UTC में रखना। उदाहरण के लिए, 2026-05-12T02:30:00Z से सात घंटे घटाने पर 2026-05-11T19:30:00Z मिलता है।

“सटीक” का अर्थ Python के दस्तावेज़ित datetime मॉडल के अनुसार है: एक घंटा 3,600 सेकंड का होता है और लीप सेकंड दर्शाए नहीं जाते। इसलिए यह वर्कफ़्लो सामान्य प्रकाशन टाइमस्टैम्प के लिए उपयुक्त है; लीप सेकंड की गणना आवश्यक हो तो अलग समय मॉडल चाहिए। Python datetime दस्तावेज़

आप किस तरह की तारीख से शुरू कर रहे हैं?

गणना करने से पहले, कैलेंडर तारीख और टाइमस्टैम्प में अंतर समझें। 2026-05-12 जैसी तारीख यह नहीं बताती कि प्रकाशन कब होता है। उसमें आधी रात जोड़ना या अपने Mac का स्थानीय समय क्षेत्र मान लेना ऐसी जानकारी जोड़ देगा जो इनपुट में दी ही नहीं गई।

अवधारणा काल्पनिक उदाहरण इससे क्या पता चलता है
नागरिक तारीख 2026-05-12 बिना समय या ऑफ़सेट वाला कैलेंडर दिन
स्थानीय तारीख और समय 2026-05-12T02:30:00 घड़ी के फ़ील्ड, पर किसी क्षण की पहचान के लिए पर्याप्त संदर्भ नहीं
UTC में व्यक्त क्षण 2026-05-12T02:30:00Z समय का एक विशिष्ट बिंदु
संख्यात्मक ऑफ़सेट +00:00 UTC से बताया गया अंतर
नामित समय क्षेत्र Europe/Paris स्थानीय घड़ी की रीडिंग को UTC से जोड़ने के नियम

ऑफ़सेट और नामित समय क्षेत्र अलग-अलग काम आते हैं। संख्यात्मक ऑफ़सेट किसी टाइमस्टैम्प का UTC से संबंध बताता है; नामित समय क्षेत्र ऐसे नियम देता है जो तारीख के अनुसार बदल सकते हैं। RFC 9557 इन अंतरों को परिभाषित करता है और समझाता है कि कुछ स्थानीय घड़ी रीडिंग शून्य या एक से अधिक क्षणों से मेल क्यों खा सकती हैं। RFC 9557, परिभाषाएँ

इस काम के लिए पूरा टाइमस्टैम्प इस्तेमाल करें। नीचे दिया प्रोग्राम बड़े अक्षर वाला T, सेकंड, एक से छह अंकों तक के वैकल्पिक भिन्नात्मक सेकंड और Z या +00:00 स्वीकार करता है। यह जानबूझकर RFC 3339 का सीमित उपसमुच्चय है; उसके टाइमस्टैम्प व्याकरण में अन्य ऑफ़सेट और अधिक भिन्नात्मक अंक भी स्वीकार्य हैं। RFC 3339, तारीख/समय फ़ॉर्मैट

Terminal में घंटे कैसे घटाएँ?

अपने Mac पर Python तैयार करें

Finder खोलें, /Applications/Utilities पर जाएँ और Terminal पर डबल-क्लिक करें। Apple इसे कमांड-लाइन ऐप खोलने का एक तरीका बताता है। Mac पर Terminal खोलें या बंद करें

यह कमांड दर्ज करें और Return दबाएँ:

python3 --version

इस गाइड के लिए Python 3.11 या उसके बाद का संस्करण इस्तेमाल करें। अगर उपयुक्त इंटरप्रेटर उपलब्ध नहीं है, तो macOS इंस्टॉलेशन के आधिकारिक निर्देशों का पालन करें: लिंक किए गए macOS डाउनलोड पेज से समर्थित Python इंस्टॉलर लें, उसकी .pkg फ़ाइल खोलें और बताए गए इंस्टॉलेशन चरण पूरे करें। फिर नई Terminal विंडो खोलकर संस्करण दोबारा जाँचें। Python दस्तावेज़ इंस्टॉलेशन और शेल से Python चलाने, दोनों के बारे में बताते हैं। macOS पर Python का उपयोग

पूरी गणना चलाएँ

नीचे दिया पूरा ब्लॉक Terminal में कॉपी करें, पहली और आख़िरी पंक्ति सहित, फिर Return दबाएँ। दूसरी गणना के लिए पेस्ट करने से पहले केवल source_timestamp और hours_to_subtract बदलें। टाइमस्टैम्प को उद्धरण चिह्नों के भीतर रखें और घंटे पूर्णांक के रूप में दर्ज करें।

python3 - <<'PY'
import re
from datetime import datetime, timedelta, timezone

source_timestamp = "2026-05-12T02:30:00Z"
hours_to_subtract = 7

def subtract_utc_hours(text, hours):
    if type(hours) is not int or hours < 0:
        raise ValueError("Hours must be a non-negative whole number.")

    match = re.fullmatch(
        r"[0-9]{4}-[0-9]{2}-[0-9]{2}T"
        r"[0-9]{2}:[0-9]{2}:[0-9]{2}"
        r"(?P<fraction>\.[0-9]{1,6})?(?:Z|\+00:00)",
        text,
    )
    if match is None:
        raise ValueError(
            "Use YYYY-MM-DDTHH:MM:SS, optionally .ffffff, "
            "ending in Z or +00:00."
        )

    normalized = text[:-1] + "+00:00" if text.endswith("Z") else text
    start = datetime.fromisoformat(normalized).astimezone(timezone.utc)
    try:
        result = start - timedelta(hours=hours)
    except OverflowError as exc:
        raise ValueError(
            "The duration or result is outside the supported range."
        ) from exc

    # Whole-hour subtraction leaves the fractional second unchanged.
    seconds_text = result.isoformat(timespec="seconds")
    return seconds_text[:-6] + (match.group("fraction") or "") + "Z"

try:
    print(subtract_utc_hours(source_timestamp, hours_to_subtract))
except ValueError as exc:
    raise SystemExit(f"Cannot subtract: {exc}")
PY

दिए गए काल्पनिक प्रकाशन टाइमस्टैम्प का आउटपुट यह है:

2026-05-11T19:30:00Z

यह Python की मानक लाइब्रेरी का उपयोग करने वाला पूरा प्रोग्राम है। यह फ़ाइल बनाए बिना गणना किया हुआ टाइमस्टैम्प प्रिंट करता है। नतीजे को उस प्रकाशन-तारीख फ़ील्ड या दस्तावेज़ में कॉपी करें जिसे आप तैयार कर रहे हैं।

API का क्रम datetime.fromisoformat(), timezone.utc में रूपांतरण, timedelta(hours=hours) घटाना और isoformat() के ज़रिए आउटपुट देना है। Python इन पार्सिंग, समय क्षेत्र, अवधि और फ़ॉर्मैटिंग ऑपरेशनों का दस्तावेज़ देता है। Python datetime API

प्रोग्राम UTC और भिन्नात्मक सेकंड कैसे बनाए रखता है?

इनपुट की जाँच के लिए UTC का स्पष्ट रूप आवश्यक है। ऑफ़सेट के बिना टाइमस्टैम्प तुरंत अस्वीकार हो जाता है, इसलिए प्रोग्राम को आपके Mac की सेटिंग से समय क्षेत्र का अनुमान लगाने की ज़रूरत नहीं पड़ती। स्वीकार किए गए दोनों प्रत्यय शून्य-ऑफ़सेट टाइमस्टैम्प के रूप में पार्स होते हैं और आउटपुट हमेशा Z के साथ लिखा जाता है।

UTC बनाए रखने का अर्थ मूल स्ट्रिंग के हर अक्षर को जस का तस रखना नहीं है। +00:00 पर समाप्त होने वाला इनपुट Z पर समाप्त होकर लौटता है। नतीजे में UTC निरूपण बना रहता है, जबकि तारीख और समय अनुरोधित अवधि के अनुसार पीछे जाते हैं।

प्रोग्राम दिए गए भिन्नात्मक-सेकंड टेक्स्ट को भी बनाए रखता है। पूरे घंटे घटाने से यह अंश नहीं बदलता, इसलिए .120 .120 ही रहता है; वह .12 नहीं बनता और न ही गायब होता है। छह से अधिक भिन्नात्मक अंकों वाले इनपुट को छोटा करने के बजाय अस्वीकार किया जाता है।

मानकों से जुड़ी एक उपयोगी बारीकी यह है: Z शून्य UTC ऑफ़सेट दर्शाता है, लेकिन इससे मूल स्थान का समय क्षेत्र तय नहीं होता। RFC 9557, RFC 3339 में Z की व्याख्या को अपडेट करता है, ताकि स्थानीय ऑफ़सेट अज्ञात हो सकता है। यह प्रोग्राम जानबूझकर Z और +00:00 स्वीकार करता है; इनपुट-नीति के तहत -00:00 को अस्वीकार करता है। RFC 9557, RFC 3339 में अपडेट

इस्तेमाल करने से पहले नतीजा कैसे जाँचें?

ऐसी गणना से शुरू करें जो मध्यरात्रि पार करती हो। मुख्य उदाहरण में, दो घंटे पीछे जाने पर 12 मई को 00:30:00 आता है; इसके बाद पाँच घंटे और पीछे जाने पर 11 मई को 19:30:00 आता है। अगर नतीजा 12 मई पर ही रहे, तो वह ग़लत है।

ये काल्पनिक उदाहरण अतिरिक्त जाँच के लिए हैं। हर पंक्ति दोहराने के लिए पूरे प्रोग्राम में इनपुट की दोनों वैल्यू बदलें।

UTC इनपुट घटाए गए घंटे अपेक्षित UTC आउटपुट
2026-05-12T02:30:00Z 7 2026-05-11T19:30:00Z
2026-01-01T00:15:00+00:00 1 2025-12-31T23:15:00Z
2028-03-01T00:30:00Z 1 2028-02-29T23:30:00Z
2026-05-12T02:30:00.120Z 7 2026-05-11T19:30:00.120Z
2026-05-12T02:30:00Z 0 2026-05-12T02:30:00Z

मुख्य उदाहरण के लिए अंतराल सात गुणा 3,600, यानी 25,200 सेकंड है। मिनट और सेकंड अपरिवर्तित रहते हैं, क्योंकि अनुरोधित अवधि में केवल पूरे घंटे हैं। तारीख मध्यरात्रि, महीने की सीमा या साल की सीमा पार कर सकती है।

इनपुट अस्वीकार होने पर क्या करें?

अस्वीकृति को जाँच के एक चरण के रूप में इस्तेमाल करें। फिर कोशिश करने से पहले छूटी हुई जानकारी या असमर्थित सटीकता की समस्या हल करें।

  • केवल तारीख उपलब्ध है: प्रकाशन का अभिप्रेत समय और उसका ऑफ़सेट पता करें। सिर्फ़ नागरिक तारीख से शुरुआती क्षण की पहचान नहीं हो सकती।
  • टाइमस्टैम्प में ऑफ़सेट नहीं है: प्रत्यय जोड़ने से पहले पुष्टि करें कि वह UTC या स्थानीय समय दर्शाता है।
  • टाइमस्टैम्प में गैर-शून्य ऑफ़सेट है: दर्शाए गए क्षण को पहले UTC में बदलें। केवल प्रत्यय बदलने से उसका अर्थ बदल जाएगा।
  • भिन्नात्मक अंक छह से अधिक हैं: ऐसा टूल इस्तेमाल करें जो उस सटीकता को बनाए रखे, या इस वर्कफ़्लो से पहले स्पष्ट राउंडिंग नीति चुनें।
  • घंटे ऋणात्मक या भिन्नात्मक हैं: गैर-ऋणात्मक पूर्णांक दें। यह प्रोग्राम जानबूझकर पूरे घंटे घटाने के लिए बनाया गया है।
  • कैलेंडर फ़ील्ड अमान्य हैं: स्रोत वैल्यू ठीक करें। 30 फ़रवरी जैसी असंभव तारीख अस्वीकार की जाती है।

Python में datetime वर्ष 1 से 9999 तक होते हैं; इस सीमा से बाहर घटाने पर त्रुटि आती है। इसका datetime मॉडल 60 सेकंड फ़ील्ड को भी अस्वीकार करता है, जबकि RFC 3339 निर्दिष्ट शर्तों के तहत लीप सेकंड के लिए यह वैल्यू स्वीकार करता है। Python datetime की सीमाएँ, RFC 3339, प्रतिबंध

अगर आपकी असली ज़रूरत “पिछले दिन का वही स्थानीय घड़ी-समय” है, तो नामित समय क्षेत्र वाला कैलेंडर वर्कफ़्लो अपनाएँ। डेलाइट-सेविंग बदलाव के दौरान नामित समय क्षेत्रों का ऑफ़सेट बदल सकता है, इसलिए यह काम 24 बीते हुए घंटे घटाने से अलग हो सकता है। Python का zoneinfo दस्तावेज़ ऐसे बदलावों के दौरान गणना का उदाहरण देता है। Python में IANA समय क्षेत्र समर्थन

पहले से UTC में व्यक्त प्रकाशन टाइमस्टैम्प के लिए काम को केंद्रित रखें: इनपुट की पुष्टि करें, पूरे घंटे की अवधि घटाएँ और कॉपी की जाने वाली वैल्यू में UTC का स्पष्ट प्रत्यय बनाए रखें। नतीजा इस्तेमाल करने से पहले तारीख की सीमा और भिन्नात्मक सटीकता जाँचें।

स्रोत