এই নির্দেশিকায় ক্যালেন্ডার, ইভেন্ট এবং এদের পারস্পরিক সম্পর্ক বর্ণনা করা হয়েছে।
ক্যালেন্ডার
ক্যালেন্ডার হলো সম্পর্কিত ইভেন্টগুলোর একটি সংগ্রহ, যার সাথে সারাংশ, ডিফল্ট টাইম জোন, অবস্থান ইত্যাদির মতো অতিরিক্ত মেটাডেটাও থাকে। প্রতিটি ক্যালেন্ডার একটি আইডি দ্বারা চিহ্নিত করা হয়, যা একটি ইমেল ঠিকানা। ক্যালেন্ডারগুলো অন্যদের সাথে শেয়ার করা যায়। প্রাথমিক ক্যালেন্ডারগুলো তাদের সংশ্লিষ্ট ব্যবহারকারী অ্যাকাউন্টের মালিকানাধীন থাকে, এবং অন্যান্য ক্যালেন্ডারগুলো একজন একক ডেটা মালিকের মালিকানাধীন হয়।
ইভেন্টগুলি
ইভেন্ট হলো একটি অবজেক্ট যা একটি নির্দিষ্ট তারিখ বা সময়সীমার সাথে যুক্ত থাকে। ইভেন্টগুলো একটি অনন্য আইডি দ্বারা চিহ্নিত করা হয়। শুরু এবং শেষের তারিখ-সময় ছাড়াও, ইভেন্টগুলোতে অন্যান্য ডেটা থাকে, যেমন সারাংশ, বিবরণ, অবস্থান, অবস্থা, রিমাইন্ডার, সংযুক্তি ইত্যাদি।
ইভেন্টের প্রকারভেদ
গুগল ক্যালেন্ডার একক এবং পুনরাবৃত্তিমূলক ইভেন্ট সমর্থন করে:
- একটি একক ঘটনা একটি অনন্য সংঘটনের প্রতিনিধিত্ব করে।
- একটি পুনরাবৃত্তিমূলক ঘটনা একাধিকবার ঘটাকে বোঝায়।
অনুষ্ঠানগুলো নির্দিষ্ট সময়ের বা দিনব্যাপীও হতে পারে।
- একটি সময়ভিত্তিক ঘটনা দুটি নির্দিষ্ট সময়বিন্দুর মধ্যে ঘটে। সময়ভিত্তিক ঘটনাগুলো কখন ঘটবে তা নির্দিষ্ট করার জন্য
start.dateTimeএবংend.dateTimeফিল্ড ব্যবহার করা হয়। - একটি সারাদিনব্যাপী ইভেন্ট একটি সম্পূর্ণ দিন বা পরপর বেশ কয়েকটি দিন ধরে চলে। সারাদিনব্যাপী ইভেন্টগুলো কখন সংঘটিত হবে তা নির্দিষ্ট করতে
start.dateএবংend.dateফিল্ড ব্যবহার করা হয়। উল্লেখ্য যে, সারাদিনব্যাপী ইভেন্টের ক্ষেত্রে timezone ফিল্ডটির কোনো তাৎপর্য নেই।
আয়োজকরা
ইভেন্টের একজনই সংগঠক থাকে, যা হলো সেই ক্যালেন্ডার যেখানে ইভেন্টের মূল কপিটি থাকে। ইভেন্টের একাধিক অংশগ্রহণকারীও থাকতে পারে। একজন অংশগ্রহণকারী সাধারণত কোনো আমন্ত্রিত ব্যবহারকারীর প্রাথমিক ক্যালেন্ডার হয়ে থাকে।
নিম্নোক্ত চিত্রটিতে ক্যালেন্ডার, ঘটনা এবং অন্যান্য সংশ্লিষ্ট উপাদানগুলোর মধ্যে ধারণাগত সম্পর্ক দেখানো হয়েছে:

প্রাথমিক ক্যালেন্ডার এবং অন্যান্য ক্যালেন্ডার
প্রাইমারি ক্যালেন্ডার হলো একটি বিশেষ ধরনের ক্যালেন্ডার যা একটিমাত্র ইউজার অ্যাকাউন্টের সাথে যুক্ত থাকে। এই ক্যালেন্ডারটি প্রতিটি নতুন ইউজার অ্যাকাউন্টের জন্য স্বয়ংক্রিয়ভাবে তৈরি হয় এবং এর আইডি সাধারণত ব্যবহারকারীর প্রাইমারি ইমেল অ্যাড্রেসের সাথে মিলে যায়। যতক্ষণ অ্যাকাউন্টটি বিদ্যমান থাকে, ততক্ষণ এর প্রাইমারি ক্যালেন্ডারটি ব্যবহারকারী কখনো মুছে ফেলতে বা এর মালিকানা ত্যাগ করতে পারেন না। তবে, এটি অন্য ব্যবহারকারীদের সাথে শেয়ার করা যায়।
মূল ক্যালেন্ডারের পাশাপাশি, আপনি স্পষ্টভাবে আরও যেকোনো সংখ্যক ক্যালেন্ডার তৈরি করতে পারেন। এই ক্যালেন্ডারগুলো পরিবর্তন, মুছে ফেলা এবং অন্যদের সাথে শেয়ার করা যায়। এই ধরনের ক্যালেন্ডারগুলোর একজনই ডেটা মালিক থাকেন, যার সর্বোচ্চ বিশেষাধিকার থাকে, যার মধ্যে ক্যালেন্ডারটি মুছে ফেলার একচেটিয়া অধিকারও অন্তর্ভুক্ত। ডেটা মালিকের অ্যাক্সেস লেভেল কমানো যায় না। প্রাথমিকভাবে, যিনি ক্যালেন্ডারটি তৈরি করেছেন, তিনিই ডেটা মালিক হিসেবে নির্ধারিত হন, তবে গুগল ক্যালেন্ডার UI-তে ডেটার মালিকানা হস্তান্তর করা যেতে পারে।
ক্যালেন্ডার ও ক্যালেন্ডার তালিকা
ক্যালেন্ডারস কালেকশনটি বিদ্যমান সমস্ত ক্যালেন্ডারকে উপস্থাপন করে। এটি ব্যবহার করে ক্যালেন্ডার তৈরি ও মুছে ফেলা যায়। এছাড়াও, আপনি একটি ক্যালেন্ডারে অ্যাক্সেস আছে এমন সমস্ত ব্যবহারকারীর জন্য শেয়ার করা গ্লোবাল প্রপার্টিগুলো পুনরুদ্ধার বা সেট করতে পারেন। উদাহরণস্বরূপ, একটি ক্যালেন্ডারের শিরোনাম এবং ডিফল্ট টাইম জোন হলো গ্লোবাল প্রপার্টি।
ক্যালেন্ডারলিস্ট হলো ব্যবহারকারীর তালিকায় (যা ওয়েব UI-এর বাম প্যানেলে দেখানো হয়) যোগ করা সমস্ত ক্যালেন্ডার এন্ট্রির একটি সংগ্রহ। ব্যবহারকারীর তালিকায় বিদ্যমান ক্যালেন্ডার যোগ করতে বা তালিকা থেকে সরাতে আপনি এটি ব্যবহার করতে পারেন। এছাড়াও, ডিফল্ট রিমাইন্ডারের মতো ব্যবহারকারী-নির্দিষ্ট ক্যালেন্ডার প্রোপার্টিগুলোর মান পুনরুদ্ধার এবং সেট করতেও এটি ব্যবহার করা যায়। আরেকটি উদাহরণ হলো ফোরগ্রাউন্ড কালার, কারণ একই ক্যালেন্ডারের জন্য ভিন্ন ভিন্ন ব্যবহারকারী ভিন্ন ভিন্ন রঙ সেট করে রাখতে পারেন।
নিম্নলিখিত সারণিতে দুটি সংগ্রহের জন্য অপারেশনগুলির অর্থের তুলনা করা হয়েছে:
| অপারেশন | ক্যালেন্ডার | ক্যালেন্ডার তালিকা |
|---|---|---|
insert | একটি নতুন দ্বিতীয় ক্যালেন্ডার তৈরি করে। এই ক্যালেন্ডারটিও নির্মাতার ক্যালেন্ডার তালিকায় যুক্ত হয় এবং ক্যালেন্ডারটি মুছে ফেলা বা স্থানান্তর করা না হলে এটি সরানো যায় না। | ব্যবহারকারীর তালিকায় একটি বিদ্যমান ক্যালেন্ডার যুক্ত করে। |
delete | একটি দ্বিতীয় ক্যালেন্ডার মুছে দেয়। | ব্যবহারকারীর তালিকা থেকে একটি ক্যালেন্ডার মুছে দেয়। |
get | ক্যালেন্ডারের মেটাডেটা পুনরুদ্ধার করে, যেমন শিরোনাম, সময় অঞ্চল। | মেটাডেটা এবং ব্যবহারকারীর নির্দিষ্ট কাস্টমাইজেশন, যেমন রঙ বা রিমাইন্ডার ওভাররাইড করার সুবিধা, পুনরুদ্ধার করে। |
patch / update | ক্যালেন্ডারের মেটাডেটা পরিবর্তন করে। | ব্যবহারকারী-নির্দিষ্ট ক্যালেন্ডার বৈশিষ্ট্য পরিবর্তন করে। |
পুনরাবৃত্তিমূলক ঘটনা
কিছু ঘটনা নিয়মিতভাবে একাধিকবার ঘটে, যেমন সাপ্তাহিক সভা, জন্মদিন এবং ছুটির দিন। শুরু ও শেষের সময় ভিন্ন হওয়া ছাড়া, এই পুনরাবৃত্ত ঘটনাগুলো প্রায়শই অভিন্ন হয়।
কোনো ঘটনাকে পুনরাবৃত্তিমূলক বলা হয় যদি তা একটি নির্দিষ্ট সময়সূচী অনুযায়ী বারবার ঘটে। একক ঘটনা পুনরাবৃত্তিমূলক নয় এবং তা কেবল একবারই ঘটে।
পুনরাবৃত্তির নিয়ম
একটি পুনরাবৃত্তিমূলক ইভেন্টের সময়সূচী দুটি অংশে সংজ্ঞায়িত করা হয়:
এর শুরু এবং শেষের ক্ষেত্রগুলি (যা প্রথম সংঘটনকে সংজ্ঞায়িত করে, যেন এটি কেবল একটি স্বতন্ত্র একক ঘটনা), এবং
এর পুনরাবৃত্তি ক্ষেত্র (যা নির্ধারণ করে যে ঘটনাটি সময়ের সাথে সাথে কীভাবে পুনরাবৃত্তি হবে)।
রিকারেন্স ফিল্ডটিতে স্ট্রিংগুলির একটি অ্যারে থাকে, যা RFC 5545- এ সংজ্ঞায়িত এক বা একাধিক RRULE , RDATE বা EXDATE প্রপার্টিকে উপস্থাপন করে।
RRULE প্রপার্টিটি সবচেয়ে গুরুত্বপূর্ণ, কারণ এটি কোনো ইভেন্টের পুনরাবৃত্তির জন্য একটি নিয়মিত নিয়ম নির্ধারণ করে। এটি বেশ কয়েকটি উপাদান নিয়ে গঠিত। সেগুলোর মধ্যে কয়েকটি হলো:
FREQ— যে হারে ঘটনাটির পুনরাবৃত্তি করা উচিত (যেমনDAILYবাWEEKLY)। আবশ্যক।INTERVAL— Works together withFREQto specify how often the event should be repeated. For example,FREQ=DAILY;INTERVAL=2means once every two days.COUNT— এই ঘটনাটি যতবার পুনরাবৃত্তি করা উচিত।UNTIL— যে তারিখ বা তারিখ-সময় পর্যন্ত অনুষ্ঠানটি পুনরাবৃত্তি করা উচিত (উভয় তারিখসহ)।BYDAY— সপ্তাহের যে দিনগুলিতে অনুষ্ঠানটি পুনরাবৃত্তি করা উচিত (SU,MO,TU, ইত্যাদি)। অন্যান্য অনুরূপ উপাদানগুলির মধ্যে রয়েছেBYMONTH,BYYEARDAY, এবংBYHOUR।
RDATE প্রপার্টিটি অতিরিক্ত তারিখ বা তারিখ-সময় নির্দিষ্ট করে, যখন ইভেন্টটি সংঘটিত হওয়া উচিত। উদাহরণস্বরূপ, RDATE;VALUE=DATE:19970101,19970120 । RRULE এর আওতাভুক্ত নয় এমন অতিরিক্ত ঘটনা যোগ করতে এটি ব্যবহার করুন।
EXDATE প্রপার্টিটি RDATE-এর অনুরূপ, তবে এটি এমন তারিখ বা তারিখ-সময় নির্দিষ্ট করে যখন ইভেন্টটি ঘটা উচিত নয় । অর্থাৎ, সেই ঘটনাগুলো বাদ দেওয়া উচিত। এটিকে অবশ্যই পুনরাবৃত্তির নিয়ম দ্বারা তৈরি একটি বৈধ ইনস্ট্যান্স নির্দেশ করতে হবে।
EXDATE এবং RDATE টাইম জোন থাকতে পারে, এবং দিনব্যাপী ইভেন্টের ক্ষেত্রে এগুলো অবশ্যই তারিখ হতে হবে (তারিখ-সময় নয়)।
প্রতিটি প্রপার্টি রিকারেন্স ফিল্ডের মধ্যে একাধিকবার থাকতে পারে। রিকারেন্সকে সমস্ত RRULE এবং RDATE রুলের সংযোগ হিসাবে সংজ্ঞায়িত করা হয়, যা থেকে সমস্ত EXDATE রুল দ্বারা বাদ দেওয়া রুলগুলো বাদ দেওয়া হয়।
পুনরাবৃত্ত ঘটনার কিছু উদাহরণ নিচে দেওয়া হলো:
একটি অনুষ্ঠান যা ২০১৫ সালের ১৫ই সেপ্টেম্বর থেকে শুরু হয়ে ২৯শে সেপ্টেম্বর, পঞ্চম বারের মতো অনুষ্ঠিত হওয়ার পর বন্ধ হয়ে যাবে এবং এটি প্রতি মঙ্গলবার ও শুক্রবার সকাল ৬টা থেকে ৭টা পর্যন্ত চলে:
... "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" ], …২০১৫ সালের ১লা জুন থেকে শুরু হওয়া একটি দিনব্যাপী অনুষ্ঠান যা মাস জুড়ে প্রতি ৩ দিন অন্তর অনুষ্ঠিত হবে, তবে ১০ই জুন বাদে কিন্তু ৯ ও ১১ই জুন অন্তর্ভুক্ত থাকবে:
... "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" ], …
দৃষ্টান্ত এবং ব্যতিক্রম
একটি পুনরাবৃত্তিমূলক ঘটনা একাধিক দৃষ্টান্ত নিয়ে গঠিত, যা হলো বিভিন্ন সময়ে এর নির্দিষ্ট সংঘটনগুলো। এই দৃষ্টান্তগুলো নিজেরাই ঘটনা হিসেবে কাজ করে।
পুনরাবৃত্তিমূলক ইভেন্টের পরিবর্তন হয় সম্পূর্ণ পুনরাবৃত্তিমূলক ইভেন্টটিকে (এবং এর সমস্ত দৃষ্টান্তকে) প্রভাবিত করতে পারে, অথবা শুধুমাত্র স্বতন্ত্র দৃষ্টান্তগুলোকে প্রভাবিত করতে পারে। যে দৃষ্টান্তগুলো তাদের মূল পুনরাবৃত্তিমূলক ইভেন্ট থেকে ভিন্ন হয়, সেগুলোকে ব্যতিক্রম (exception ) বলা হয়।
উদাহরণস্বরূপ, একটি ব্যতিক্রমের সারাংশ ভিন্ন হতে পারে, শুরুর সময় ভিন্ন হতে পারে, অথবা শুধুমাত্র সেই ইনস্ট্যান্সের জন্য অতিরিক্ত অংশগ্রহণকারীদের আমন্ত্রণ জানানো হতে পারে। আপনি পুনরাবৃত্তিমূলক ইভেন্টটি না সরিয়েও একটি ইনস্ট্যান্স সম্পূর্ণরূপে বাতিল করতে পারেন (ইনস্ট্যান্স বাতিলের বিষয়টি ইভেন্টের status প্রতিফলিত হয়)।
গুগল ক্যালেন্ডার এপিআই ব্যবহার করে পুনরাবৃত্তিমূলক ইভেন্ট এবং ইনস্ট্যান্সগুলো কীভাবে পরিচালনা করতে হয়, তার উদাহরণ এখানে পাওয়া যাবে।
সময় অঞ্চল
টাইম জোন এমন একটি অঞ্চলকে নির্দিষ্ট করে যেখানে একটি অভিন্ন প্রমাণ সময় অনুসরণ করা হয়। গুগল ক্যালেন্ডার এপিআই-তে, আপনি IANA টাইম জোন আইডেন্টিফায়ার ব্যবহার করে টাইম জোন নির্দিষ্ট করেন।
আপনি ক্যালেন্ডার এবং ইভেন্ট উভয়ের জন্যই টাইম জোন সেট করতে পারেন। নিম্নলিখিত বিভাগগুলিতে এই সেটিংসের প্রভাব বর্ণনা করা হয়েছে।
ক্যালেন্ডার সময় অঞ্চল
ক্যালেন্ডারের টাইম জোনটি ডিফল্ট টাইম জোন নামেও পরিচিত, কারণ এটি কোয়েরির ফলাফলের উপর প্রভাব ফেলে। ক্যালেন্ডারের টাইম জোনটি events.get() , events.list() , এবং events.instances() মেথডগুলো দ্বারা সময়ের মানগুলোকে কীভাবে ব্যাখ্যা বা উপস্থাপন করা হয়, তা প্রভাবিত করে।
- কোয়েরির ফলাফলের সময়-অঞ্চল রূপান্তর
-
get(),list(), এবংinstances()মেথডগুলোর ফলাফলtimeZoneপ্যারামিটারে আপনার নির্দিষ্ট করা টাইম জোনে ফেরত দেওয়া হয়। আপনি যদি এই প্যারামিটারটি বাদ দেন, তাহলে এই মেথডগুলো ডিফল্ট হিসেবে ক্যালেন্ডার টাইম জোন ব্যবহার করে। - সারাদিনের ইভেন্টগুলোকে সময়-সীমাবদ্ধ কোয়েরির সাথে মেলানো
- `
list()এবংinstances()মেথডগুলো আপনাকে শুরু এবং শেষের সময়ের ফিল্টার নির্দিষ্ট করার সুযোগ দেয়, এবং `list()` মেথডটি নির্দিষ্ট সীমার মধ্যে থাকা ইনস্ট্যান্সগুলো ফেরত দেয়। সারাদিনের ইভেন্টগুলো ফিল্টার স্পেসিফিকেশনের মধ্যে পড়ে কিনা তা নির্ধারণ করতে, সেগুলোর শুরু এবং শেষের সময় গণনা করার জন্য ক্যালেন্ডারের টাইম জোন ব্যবহার করা হয়।
ইভেন্টের সময় অঞ্চল
ইভেন্ট ইনস্ট্যান্সগুলোর একটি শুরু এবং শেষ সময় থাকে; এই সময়গুলোর নির্দিষ্টকরণে টাইম জোন অন্তর্ভুক্ত থাকতে পারে। আপনি বিভিন্ন উপায়ে টাইম জোন নির্দিষ্ট করতে পারেন; নিম্নলিখিত সবগুলোই একই সময় নির্দেশ করে:
-
dateTimeফিল্ডে একটি টাইম জোন অফসেট অন্তর্ভুক্ত করুন, উদাহরণস্বরূপ2017-01-25T09:00:00-0500। - কোনো অফসেট ছাড়া সময় উল্লেখ করুন, যেমন
2017-01-25T09:00:00, এবংtimeZoneফিল্ডটি খালি রাখুন (এতে স্বয়ংক্রিয়ভাবে ডিফল্ট টাইম জোন ব্যবহৃত হবে)। - কোনো অফসেট ছাড়া সময় উল্লেখ করুন, যেমন
2017-01-25T09:00:00, কিন্তু টাইম জোন নির্দিষ্ট করার জন্যtimeZoneফিল্ডটি ব্যবহার করুন।
আপনি চাইলে ইভেন্টের সময় UTC-তেও উল্লেখ করতে পারেন:
- UTC-তে সময় উল্লেখ করুন:
2017-01-25T14:00:00Zঅথবা একটি শূন্য অফসেট ব্যবহার করুন2017-01-25T14:00:00+0000।
এই সব ক্ষেত্রে ইভেন্টের সময়ের অভ্যন্তরীণ উপস্থাপনা একই থাকে, কিন্তু timeZone ফিল্ডটি সেট করলে ইভেন্টটির সাথে একটি টাইম জোন যুক্ত হয়ে যায়, ঠিক যেমন আপনি ক্যালেন্ডার UI ব্যবহার করে কোনো ইভেন্টের টাইম জোন সেট করেন ।

পুনরাবৃত্ত ইভেন্টের সময় অঞ্চল
পুনরাবৃত্তিমূলক ইভেন্টের জন্য সর্বদা একটি নির্দিষ্ট টাইমজোন উল্লেখ করতে হবে। ইভেন্টটির পুনরাবৃত্তি প্রসারিত করার জন্য এটি প্রয়োজন।