कैलेंडर और इवेंट

इस गाइड में कैलेंडर, इवेंट, और उनके बीच के संबंध के बारे में बताया गया है.

कैलेंडर

कैलेंडर एक-दूसरे से जुड़े इवेंट का कलेक्शन होता है. इसमें अतिरिक्त मेटाडेटा भी शामिल होता है. जैसे, खास जानकारी, डिफ़ॉल्ट टाइम ज़ोन, और जगह. हर कैलेंडर की पहचान एक आईडी से होती है. यह आईडी, ईमेल पता होता है. कैलेंडर को अन्य लोगों के साथ शेयर किया जा सकता है. प्राइमरी कैलेंडर का मालिकाना हक, उससे जुड़े उपयोगकर्ता खाते के पास होता है. अन्य कैलेंडर का मालिकाना हक, डेटा के किसी एक मालिक के पास होता है.

इवेंट

इवेंट एक ऑब्जेक्ट होता है, जो किसी खास तारीख या समयसीमा से जुड़ा होता है. इवेंट की पहचान एक यूनीक आईडी से की जाती है. इवेंट में शुरू और खत्म होने की तारीख और समय के अलावा, अन्य डेटा भी होता है. जैसे, खास जानकारी, ब्यौरा, जगह, स्टेटस, रिमाइंडर, और अटैचमेंट.

इवेंट के टाइप

Google Calendar में एक बार होने वाले और बार-बार होने वाले इवेंट बनाए जा सकते हैं:

  • सिंगल इवेंट, किसी खास इवेंट को दिखाता है.
  • बार-बार होने वाले इवेंट में, एक से ज़्यादा बार होने वाले इवेंट की जानकारी होती है.

इवेंट समय के हिसाब से या पूरे दिन के लिए भी हो सकते हैं:

  • समय के हिसाब से होने वाला इवेंट, समय के दो खास पॉइंट के बीच होता है. तय समय पर होने वाले इवेंट के लिए, start.dateTime और end.dateTime फ़ील्ड का इस्तेमाल किया जाता है. इससे यह तय किया जाता है कि इवेंट कब होगा.
  • पूरे दिन चलने वाला इवेंट, पूरे दिन या लगातार कई दिनों तक चलता है. पूरे दिन चलने वाले इवेंट के लिए, start.date और end.date फ़ील्ड का इस्तेमाल किया जाता है. इससे यह तय किया जाता है कि इवेंट कब होगा. ध्यान दें कि पूरे दिन चलने वाले इवेंट के लिए, टाइमज़ोन फ़ील्ड का कोई मतलब नहीं है.
को एक साथ तय करना मान्य नहीं है.

आयोजक

इवेंट का सिर्फ़ एक आयोजक होता है. यह वह कैलेंडर होता है जिसमें इवेंट की मुख्य कॉपी मौजूद होती है. इवेंट में एक से ज़्यादा मेहमान भी शामिल हो सकते हैं. आम तौर पर, किसी इवेंट में शामिल होने वाला व्यक्ति, न्योता पाने वाले उपयोगकर्ता का मुख्य कैलेंडर होता है.

यहां दिए गए डायग्राम में, कैलेंडर, इवेंट, और उनसे जुड़े अन्य एलिमेंट के बीच का कॉन्सेप्ट दिखाया गया है:

कैलेंडर और इवेंट का कॉन्सेप्ट मॉडल

प्राइमरी कैलेंडर और अन्य कैलेंडर

मुख्य कैलेंडर, एक खास तरह का कैलेंडर होता है. यह किसी एक उपयोगकर्ता खाते से जुड़ा होता है. यह कैलेंडर, हर नए उपयोगकर्ता खाते के लिए अपने-आप बन जाता है. इसका आईडी, आम तौर पर उपयोगकर्ता के मुख्य ईमेल पते से मेल खाता है. जब तक खाता मौजूद है, तब तक इसका मुख्य कैलेंडर न तो मिटाया जा सकता है और न ही उपयोगकर्ता इसे "अन-ओन्ड" कर सकता है. हालांकि, इसे अब भी अन्य उपयोगकर्ताओं के साथ शेयर किया जा सकता है.

मुख्य कैलेंडर के अलावा, जितने चाहें उतने अन्य कैलेंडर बनाए जा सकते हैं. इन कैलेंडर में बदलाव किया जा सकता है, इन्हें मिटाया जा सकता है, और इन्हें अन्य लोगों के साथ शेयर किया जा सकता है. ऐसे कैलेंडर का डेटा मालिक एक ही होता है. उसके पास सबसे ज़्यादा अनुमतियां होती हैं. इसमें कैलेंडर को मिटाने का खास अधिकार भी शामिल है. डेटा के मालिक के ऐक्सेस लेवल को डाउनग्रेड नहीं किया जा सकता. डेटा का मालिकाना हक शुरुआत में उस उपयोगकर्ता के पास होता है जिसने कैलेंडर बनाया है. हालांकि, Google Calendar के यूज़र इंटरफ़ेस (यूआई) में डेटा का मालिकाना हक ट्रांसफ़र किया जा सकता है.

कैलेंडर और कैलेंडर की सूची

Calendars कलेक्शन, सभी मौजूदा कैलेंडर दिखाता है. इसका इस्तेमाल कैलेंडर बनाने और मिटाने के लिए किया जा सकता है. इसके अलावा, कैलेंडर को ऐक्सेस करने वाले सभी उपयोगकर्ताओं के साथ शेयर की गई ग्लोबल प्रॉपर्टी को वापस लाया जा सकता है या सेट किया जा सकता है. उदाहरण के लिए, किसी कैलेंडर का टाइटल और डिफ़ॉल्ट टाइम ज़ोन, ग्लोबल प्रॉपर्टी होती हैं.

CalendarList, कैलेंडर की उन सभी एंट्री का कलेक्शन होता है जिन्हें किसी उपयोगकर्ता ने अपनी सूची में जोड़ा है. यह सूची, वेब यूज़र इंटरफ़ेस के बाएं पैनल में दिखती है. इसका इस्तेमाल, उपयोगकर्ता की सूची में मौजूदा कैलेंडर जोड़ने और हटाने के लिए किया जा सकता है. इसका इस्तेमाल, उपयोगकर्ता के हिसाब से कैलेंडर की प्रॉपर्टी की वैल्यू को वापस पाने और सेट करने के लिए भी किया जाता है. जैसे, डिफ़ॉल्ट रिमाइंडर. एक और उदाहरण फ़ोरग्राउंड कलर है, क्योंकि अलग-अलग उपयोगकर्ताओं के पास एक ही कैलेंडर के लिए अलग-अलग रंग सेट करने का विकल्प होता है.

यहां दी गई टेबल में, दोनों कलेक्शन के लिए कार्रवाइयों के मतलब की तुलना की गई है:

कार्रवाई कैलेंडर CalendarList
insert इस सुविधा की मदद से, नया सेकंडरी कैलेंडर बनाया जा सकता है. यह कैलेंडर, क्रिएटर की कैलेंडर सूची में भी जुड़ जाता है. इसे तब तक नहीं हटाया जा सकता, जब तक कैलेंडर को मिटा न दिया जाए या ट्रांसफ़र न कर दिया जाए. इससे उपयोगकर्ता की सूची में मौजूदा कैलेंडर डाला जाता है.
delete इस तरीके का इस्तेमाल करके, सेकंडरी कैलेंडर मिटाया जा सकता है. इस तरीके का इस्तेमाल करके, उपयोगकर्ता की सूची से किसी कैलेंडर को हटाया जा सकता है.
get यह कुकी, कैलेंडर का मेटाडेटा वापस पाती है. जैसे, टाइटल और टाइम ज़ोन. यह कुकी, मेटाडेटा के साथ-साथ उपयोगकर्ता के हिसाब से बनाई गई सेटिंग को भी वापस लाती है. जैसे, रंग या सूचनाओं को खारिज करने की सुविधा.
patch/update इस अनुमति की मदद से, कैलेंडर के मेटाडेटा में बदलाव किया जाता है. यह उपयोगकर्ता के हिसाब से कैलेंडर की प्रॉपर्टी में बदलाव करता है.

बार-बार होने वाले इवेंट

कुछ इवेंट नियमित तौर पर कई बार होते हैं. जैसे, हर हफ़्ते होने वाली मीटिंग, जन्मदिन, और छुट्टियां. शुरू और खत्म होने के अलग-अलग समय के अलावा, दोहराए जाने वाले ये इवेंट अक्सर एक जैसे होते हैं.

अगर कोई इवेंट तय किए गए शेड्यूल के हिसाब से बार-बार होता है, तो उसे बार-बार होने वाला इवेंट कहा जाता है. सिंगल इवेंट, बार-बार नहीं होते और सिर्फ़ एक बार होते हैं.

बार-बार होने का नियम

बार-बार होने वाले इवेंट के शेड्यूल को दो हिस्सों में बांटा जाता है:

  • इसके शुरू और खत्म होने के फ़ील्ड (जो पहली बार होने वाले इवेंट के बारे में बताते हैं. ऐसा लगता है कि यह सिर्फ़ एक स्टैंड-अलोन इवेंट है) और

  • दोहराए जाने की जानकारी देने वाला फ़ील्ड (इससे यह तय होता है कि इवेंट को समय-समय पर कैसे दोहराया जाना चाहिए).

recurrence फ़ील्ड में स्ट्रिंग की एक ऐसी कैटगरी होती है जो RFC 5545 में तय की गई एक या कई RRULE, RDATE या EXDATE प्रॉपर्टी को दिखाती है.

RRULE प्रॉपर्टी सबसे अहम होती है, क्योंकि यह इवेंट को दोहराने के लिए सामान्य नियम तय करती है. इसमें कई कॉम्पोनेंट शामिल होते हैं. इनमें से कुछ इस तरह के हैं:

  • FREQ — इससे यह तय होता है कि इवेंट को कितनी बार दोहराया जाना चाहिए. जैसे, DAILY या WEEKLY. यह ज़रूरी है.

  • INTERVAL — यह FREQ के साथ मिलकर काम करता है. इससे यह तय किया जाता है कि इवेंट को कितनी बार दोहराया जाना चाहिए. उदाहरण के लिए, FREQ=DAILY;INTERVAL=2 का मतलब है कि हर दो दिन में एक बार.

  • COUNT — यह इवेंट कितनी बार दोहराया जाना चाहिए.

  • UNTIL — वह तारीख या तारीख और समय जब तक इवेंट को दोहराया जाना चाहिए. इसमें वह तारीख भी शामिल है.

  • BYDAY — हफ़्ते के वे दिन जिन पर इवेंट को दोहराया जाना चाहिए (SU, MO, TU वगैरह). इसी तरह के अन्य कॉम्पोनेंट में BYMONTH, BYYEARDAY, और BYHOUR शामिल हैं.

RDATE प्रॉपर्टी से, इवेंट होने की अतिरिक्त तारीखों या तारीख-समय के बारे में पता चलता है. उदाहरण के लिए, RDATE;VALUE=DATE:19970101,19970120. RRULE में शामिल नहीं किए गए अन्य अवसरों को जोड़ने के लिए, इस एट्रिब्यूट का इस्तेमाल करें.

EXDATE प्रॉपर्टी, RDATE प्रॉपर्टी की तरह ही होती है. हालांकि, यह उन तारीखों या तारीख-समय के बारे में बताती है जब इवेंट नहीं होना चाहिए. इसका मतलब है कि उन इवेंट को शामिल नहीं किया जाना चाहिए. यह, बार-बार होने के नियम से जनरेट किए गए किसी मान्य इंस्टेंस की ओर ले जाना चाहिए.

EXDATE और RDATE में टाइम ज़ोन हो सकता है. साथ ही, पूरे दिन चलने वाले इवेंट के लिए, ये तारीखें होनी चाहिए (तारीख और समय नहीं).

हर प्रॉपर्टी, recurrence फ़ील्ड में कई बार दिख सकती है. दोहराव को RRULE और RDATE के सभी नियमों के यूनीयन के तौर पर तय किया जाता है. इसमें से EXDATE के सभी नियमों से बाहर रखे गए नियमों को घटा दिया जाता है.

बार-बार होने वाले इवेंट के कुछ उदाहरण यहां दिए गए हैं:

  1. ऐसा इवेंट जो हर मंगलवार और शुक्रवार को सुबह 6:00 बजे से 7:00 बजे तक होता है. यह इवेंट 15 सितंबर, 2015 से शुरू हुआ था और 29 सितंबर, 2015 को पांच बार होने के बाद बंद हो गया:

    ...
    "start": {
      "dateTime": "2015-09-15T06:00:00+02:00",
      "timeZone": "Europe/Zurich"
    },
    "end": {
      "dateTime": "2015-09-15T07:00:00+02:00",
      "timeZone": "Europe/Zurich"
    },
    "recurrence": [
      "RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=TU,FR"
    ],
    ...
    
  2. पूरे दिन का इवेंट, जो 1 जून, 2015 को शुरू होता है और पूरे महीने हर 3 दिन में दोहराया जाता है. इसमें 10 जून को छोड़कर 9 और 11 जून शामिल हैं:

    ...
    "start": {
      "date": "2015-06-01"
    },
    "end": {
      "date": "2015-06-02"
    },
    "recurrence": [
      "EXDATE;VALUE=DATE:20150610",
      "RDATE;VALUE=DATE:20150609,20150611",
      "RRULE:FREQ=DAILY;UNTIL=20150628;INTERVAL=3"
    ],
    ...
    

उदाहरण और अपवाद

बार-बार होने वाले इवेंट में कई उदाहरण शामिल होते हैं: अलग-अलग समय पर होने वाले इवेंट. ये इंस्टेंस, खुद इवेंट के तौर पर काम करते हैं.

बार-बार होने वाले इवेंट में किए गए बदलाव, पूरे इवेंट और उसके सभी इंस्टेंस पर लागू हो सकते हैं. इसके अलावा, ये बदलाव सिर्फ़ अलग-अलग इंस्टेंस पर भी लागू हो सकते हैं. बार-बार होने वाले इवेंट की ऐसी घटनाएं जो मूल इवेंट से अलग होती हैं उन्हें अपवाद कहा जाता है.

उदाहरण के लिए, किसी अपवाद की खास जानकारी, शुरू होने का समय अलग हो सकता है या उसमें शामिल होने के लिए, सिर्फ़ उस इंस्टेंस के लिए मेहमानों को न्योता भेजा गया हो. बार-बार होने वाले इवेंट को हटाए बिना, किसी इंस्टेंस को पूरी तरह से रद्द भी किया जा सकता है. इवेंट status में, इंस्टेंस के रद्द होने की जानकारी दिखती है.

Google Calendar API का इस्तेमाल करके, बार-बार होने वाले इवेंट और इंस्टेंस के साथ काम करने के उदाहरणों के लिए, बार-बार होने वाले इवेंट देखें.

समय क्षेत्र

टाइम ज़ोन, किसी ऐसे क्षेत्र को दिखाता है जहां एक ही स्टैंडर्ड टाइम का इस्तेमाल किया जाता है. Google Calendar API में, IANA टाइम ज़ोन आइडेंटिफ़ायर का इस्तेमाल करके टाइम ज़ोन तय किए जाते हैं.

दोनों कैलेंडर और इवेंट के लिए टाइम ज़ोन सेट किया जा सकता है. यहां दिए गए सेक्शन में, इन सेटिंग के असर के बारे में बताया गया है.

कैलेंडर का टाइम ज़ोन

कैलेंडर के टाइम ज़ोन को डिफ़ॉल्ट टाइम ज़ोन भी कहा जाता है, क्योंकि यह क्वेरी के नतीजों पर असर डालता है. कैलेंडर के समय क्षेत्र से, events.get(), events.list(), और events.instances() तरीकों से समय की वैल्यू को समझने या दिखाने के तरीके पर असर पड़ता है.

क्वेरी के नतीजे के टाइम-ज़ोन को बदलना
get(), list(), और instances() तरीकों के नतीजे, उस टाइम ज़ोन में दिखाए जाते हैं जिसे आपने timeZone पैरामीटर में तय किया है. इस पैरामीटर को शामिल न करने पर, ये सभी तरीके डिफ़ॉल्ट रूप से कैलेंडर के टाइम ज़ोन का इस्तेमाल करते हैं.
पूरे दिन चलने वाले इवेंट को समयसीमा वाली क्वेरी से मैच करना
list() और instances() तरीकों की मदद से, शुरू और खत्म होने के समय के फ़िल्टर तय किए जा सकते हैं. इन तरीकों से, तय की गई सीमा में आने वाले इंस्टेंस वापस मिलते हैं. कैलेंडर के टाइम ज़ोन का इस्तेमाल, पूरे दिन चलने वाले इवेंट के शुरू और खत्म होने के समय का हिसाब लगाने के लिए किया जाता है. इससे यह तय किया जाता है कि इवेंट, फ़िल्टर की खास जानकारी के मुताबिक है या नहीं.

इवेंट का टाइम ज़ोन

इवेंट इंस्टेंस के शुरू और खत्म होने का समय होता है. इन समयों के बारे में जानकारी देते समय, टाइम ज़ोन भी शामिल किया जा सकता है. टाइम ज़ोन की जानकारी कई तरीकों से दी जा सकती है. यहां दिए गए सभी उदाहरणों में एक ही समय बताया गया है:

  • dateTime फ़ील्ड में टाइम ज़ोन का ऑफ़सेट शामिल करें. उदाहरण के लिए, 2017-01-25T09:00:00-0500.
  • बिना ऑफ़सेट के समय की जानकारी दें. उदाहरण के लिए, 2017-01-25T09:00:00. साथ ही, timeZone फ़ील्ड को खाली छोड़ दें. इससे डिफ़ॉल्ट टाइम ज़ोन का इस्तेमाल किया जाएगा.
  • बिना ऑफ़सेट के समय की जानकारी दें. उदाहरण के लिए, 2017-01-25T09:00:00. हालांकि, टाइम ज़ोन की जानकारी देने के लिए timeZone फ़ील्ड का इस्तेमाल करें.

अगर चाहें, तो इवेंट के समय को यूटीसी में भी सेट किया जा सकता है:

  • यूटीसी के हिसाब से समय डालें: 2017-01-25T14:00:00Z या शून्य ऑफ़सेट 2017-01-25T14:00:00+0000 का इस्तेमाल करें.

इन सभी मामलों में, इवेंट के समय का इंटरनल रिप्रेजेंटेशन एक जैसा होता है. हालांकि, timeZone फ़ील्ड सेट करने से इवेंट में टाइम ज़ोन जुड़ जाता है. ठीक वैसे ही जैसे Calendar के यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके इवेंट का टाइम ज़ोन सेट करने पर होता है:

स्क्रीनशॉट का वह हिस्सा जिसमें किसी इवेंट का टाइम ज़ोन दिखाया गया है

बार-बार होने वाले इवेंट का टाइम ज़ोन

बार-बार होने वाले इवेंट के लिए, आपको हमेशा एक ही समय क्षेत्र बताना होगा, ताकि इवेंट की बार-बार होने वाली गतिविधियों को बढ़ाया जा सके.