DateTimeOffset
একটি উপস্থাপনা ক্ষণিক সময় (নামেও পরিচিত পরম সময় )। তারপরে, আমি সময়ের একটি মুহুর্তটি বোঝাই যা সবার কাছে সর্বজনীন ( লিপ সেকেন্ডের জন্য অ্যাকাউন্টিং নয় , বা সময় বিচ্ছুরণের আপেক্ষিক প্রভাব )। তাত্ক্ষণিক সময় উপস্থাপনের অন্য উপায়টি DateTime
যেখানে .Kind
রয়েছে DateTimeKind.Utc
।
এটি ক্যালেন্ডারের সময় থেকে আলাদা ( সিভিল টাইম নামেও পরিচিত ), যা কারও ক্যালেন্ডারে একটি অবস্থান এবং সারা পৃথিবীতে অনেকগুলি বিভিন্ন ক্যালেন্ডার রয়েছে। আমরা এই ক্যালেন্ডারগুলিকে সময় অঞ্চল বলি । ক্যালেন্ডার সময় একটি DateTime
যেখানে বা .Kind
হয় দ্বারা প্রতিনিধিত্ব করা হয় । এবং ফলাফলগুলি ব্যবহার করা কম্পিউটারটি কোথায় অবস্থান করছে সে সম্পর্কে আপনার অন্তর্নিহিত ধারণা রয়েছে এমন পরিস্থিতিতে কেবল অর্থবহ ful (উদাহরণস্বরূপ, ব্যবহারকারীর ওয়ার্কস্টেশন)DateTimeKind.Unspecified
DateTimeKind.Local
.Local
তাহলে, DateTimeOffset
ইউটিসির পরিবর্তে কেন DateTime
? এটা সব দৃষ্টিকোণ সম্পর্কে। আসুন একটি উপমা ব্যবহার করুন - আমরা ফটোগ্রাফার হওয়ার ভান করব।
কল্পনা করুন যে আপনি কোনও ক্যালেন্ডার টাইমলাইনে দাঁড়িয়ে আছেন এবং আপনার সামনে তাত্ক্ষণিক টাইমলাইনে কোনও ব্যক্তির দিকে ক্যামেরা দেখিয়েছেন। আপনার সময় অঞ্চলের নিয়ম অনুসারে আপনি আপনার ক্যামেরাটিকে সারিবদ্ধ করেন - যা দিবালোকের সময় সাশ্রয়ের কারণে বা আপনার সময় অঞ্চলটির আইনী সংজ্ঞাতে অন্য পরিবর্তনগুলির কারণে পর্যায়ক্রমে পরিবর্তিত হয়। (আপনার অবিচল হাত নেই, তাই আপনার ক্যামেরাটি নড়বড়ে)
ফটোতে দাঁড়িয়ে থাকা ব্যক্তিটি আপনার ক্যামেরাটি যে কোণ থেকে এসেছে তা দেখতে পাবে। অন্যরা যদি ছবি তুলছিল, তারা বিভিন্ন কোণ থেকে হতে পারে। এটিই Offset
অংশটির DateTimeOffset
প্রতিনিধিত্ব করে।
সুতরাং আপনি যদি আপনার ক্যামেরাকে "পূর্ব সময়" লেবেল করেন, কখনও কখনও আপনি -5 থেকে পয়েন্ট করছেন এবং কখনও কখনও আপনি -4 থেকে পয়েন্ট করছেন। সারা বিশ্ব জুড়ে ক্যামেরা রয়েছে, সমস্ত আলাদা আলাদা লেবেলযুক্ত জিনিস এবং সমস্ত একই কোণ থেকে একই তাত্ক্ষণিক টাইমলাইনে নির্দেশ করে। তাদের মধ্যে কিছু একে অপরের ঠিক পাশেই (বা উপরে), তাই অফসেটটি জানা সময়সীমার সাথে সম্পর্কিত কিনা তা নির্ধারণ করার জন্য পর্যাপ্ত নয়।
এবং ইউটিসির কী হবে? ঠিক আছে, এটি সেখানে একটি ক্যামেরা যা স্থির হাত রাখার গ্যারান্টিযুক্ত। এটি একটি ত্রিপডে আছে, দৃly়ভাবে মাটিতে নোঙ্গর করা। এটি কোথাও যাচ্ছে না। আমরা এর দৃষ্টিভঙ্গির কোণটিকে শূন্য অফসেট বলি।

সুতরাং - এই উপমাটি আমাদের কী বলে? এটি কিছু স্বজ্ঞাত গাইডলাইন সরবরাহ করে-
আপনি যদি বিশেষভাবে কোনও জায়গার তুলনায় সময় উপস্থাপন করছেন তবে এটি ক্যালেন্ডারের সময়ে একটি সহ উপস্থাপন করুন DateTime
। কেবলমাত্র নিশ্চিত হন যে আপনি কখনই একটি ক্যালেন্ডারকে অন্য ক্যালেন্ডারে বিভ্রান্ত করেন না। Unspecified
আপনার অনুমান করা উচিত। Local
থেকে আসা শুধুমাত্র দরকারী DateTime.Now
। উদাহরণস্বরূপ, আমি DateTime.Now
এটি একটি ডাটাবেসে পেতে এবং সেভ করতে পারি - তবে যখন আমি এটি পুনরুদ্ধার করি তখন আমাকে ধরে নিতে হবে যে এটি Unspecified
। আমি নির্ভর করতে পারি না যে আমার স্থানীয় ক্যালেন্ডারটি একই ক্যালেন্ডারটি এটি থেকে নেওয়া হয়েছিল taken
আপনি যদি অবশ্যই সর্বদা মুহুর্তের বিষয়ে নিশ্চিত হন তবে নিশ্চিত হন যে আপনি তাত্ক্ষণিক সময়ের প্রতিনিধিত্ব করছেন। ব্যবহারের DateTimeOffset
আইন বলবত্, অথবা ইউটিসি ব্যবহার করতে DateTime
কনভেনশন দ্বারা।
আপনার যদি তাত্ক্ষণিক সময়ের একটি মুহূর্ত ট্র্যাক করতে হয় তবে আপনি এটিও জানতে চান "ব্যবহারকারী তাদের স্থানীয় ক্যালেন্ডারে এটি কী সময় মনে করেছিল?" - তাহলে আপনাকে অবশ্যই একটি ব্যবহার করতে হবেDateTimeOffset
। এটি টাইমকিপিং সিস্টেমগুলির জন্য খুব গুরুত্বপূর্ণ, উদাহরণস্বরূপ - প্রযুক্তিগত এবং আইনী উদ্বেগ উভয়ের জন্য।
আপনার যদি কখনও পূর্বে রেকর্ডকৃত সংশোধন DateTimeOffset
করতে হয় - নতুন অফসেটটি এখনও ব্যবহারকারীর জন্য প্রাসঙ্গিক কিনা তা নিশ্চিত করতে আপনার একা অফসেটে পর্যাপ্ত তথ্য নেই। আপনি আবশ্যক এছাড়াও একটি সময় অঞ্চল আইডেন্টিফায়ার দোকান (মনে - আমি যে ক্যামেরা নামে প্রয়োজন তাই আমি একটি নতুন ছবি নিতে পারেন এমনকি যদি অবস্থান পরিবর্তিত হয়েছে)।
এটিও উল্লেখ করা উচিত যে নোদা সময়ের জন্য এটির জন্য একটি প্রতিনিধিত্ব রয়েছে ZonedDateTime
, যখন নেট বেস ক্লাসের লাইব্রেরির অনুরূপ কিছু নেই। আপনার একটি DateTimeOffset
এবং TimeZoneInfo.Id
মান উভয়ই সঞ্চয় করতে হবে ।
মাঝে মাঝে, আপনি একটি ক্যালেন্ডার সময় উপস্থাপন করতে চান যা "যার দিকে এটি তাকিয়ে থাকে" এর স্থানীয়। উদাহরণস্বরূপ, আজকের অর্থ কী তা নির্ধারণ করার সময় । আজ সর্বদা মধ্যরাত থেকে মধ্যরাত্রি, তবে এগুলি তাত্ক্ষণিক টাইমলাইনে প্রায় সীমাহীন সংখ্যক ওভারল্যাপিং রেঞ্জের প্রতিনিধিত্ব করে। (অনুশীলনে আমাদের কাছে সীমাবদ্ধ সংখ্যক টাইমজোন রয়েছে তবে আপনি অফসেটগুলি টিকের কাছে প্রকাশ করতে পারেন) সুতরাং এই পরিস্থিতিতে আপনি কীভাবে "কে জিজ্ঞাসা করছেন" কে সীমাবদ্ধ রাখতে হবে তা নিশ্চিত করে নিন? একটি একক সময় অঞ্চলে প্রশ্ন জিজ্ঞাসা করুন, বা যথাযথ হিসাবে তাত্ক্ষণিক সময়ে ফিরে অনুবাদ সঙ্গে ডিল।
DateTimeOffset
এই উপমাটি ব্যাক আপ করার বিষয়ে এখানে কয়েকটি আরও কয়েকটি বিট দেওয়া হয়েছে এবং এটিকে সোজা রাখার জন্য কিছু টিপস:
আপনি যদি দুটি DateTimeOffset
মান তুলনা করেন তবে তুলনা করার আগে সেগুলি প্রথমে শূন্য অফসেটে স্বাভাবিক করা হয়। অন্য কথায়, 2012-01-01T00:00:00+00:00
এবং 2012-01-01T02:00:00+02:00
একই তাত্ক্ষণিক মুহুর্তটি উল্লেখ করুন এবং তাই সমান।
যদি আপনি কোন ইউনিট টেস্টিং এবং প্রয়োজন করছ তাহলে অফসেট, পরীক্ষার নির্দিষ্ট করা উভয়DateTimeOffset
মান, এবং .Offset
আলাদাভাবে সম্পত্তি।
। নেট ফ্রেমওয়ার্কটিতে একটি একমুখী অন্তর্নিহিত রূপান্তর রয়েছে যা আপনাকে DateTime
কোনও DateTimeOffset
প্যারামিটার বা ভেরিয়েবলের মধ্যে যেতে দেয়। তা করার বিষয়ে । আপনি যদি কোনও ইউটিসি ধরনের পাস করেন তবে এটি শূন্য অফসেট সহ বহন করবে, তবে আপনি যদি পাস করেন বা হয় তবে এটি স্থানীয় বলে ধরে নেওয়া হবে । কাঠামোটি মূলত বলছে, "আচ্ছা, আপনি আমাকে ক্যালেন্ডারের সময়টিকে তাত্ক্ষণিক সময়ে রূপান্তর করতে বলেছিলেন, তবে কোথা থেকে এসেছে তা আমার কোনও ধারণা নেই, তাই আমি কেবল স্থানীয় ক্যালেন্ডারটি ব্যবহার করব।" আপনি যদি কোনও আলাদা টাইমজোন দিয়ে কোনও কম্পিউটারে অনির্ধারিতভাবে লোড করেন তবে এটি একটি বিশাল গোটচা । (আইএমএইচও - এটি একটি ব্যতিক্রম ছুঁড়ে ফেলা উচিত - তবে তা হয় না)).Kind
.Local
.Unspecified
DateTime
নির্লজ্জ প্লাগ:
অনেক লোক আমার সাথে ভাগ করে নিয়েছেন যে তারা এই উপমাটি অত্যন্ত মূল্যবান বলে মনে করেন, তাই আমি এটিকে আমার বহুবচন স্থান, তারিখ এবং সময় মৌলিক বিষয়গুলিতে অন্তর্ভুক্ত করেছি । "ক্যালেন্ডার টাইম বনাম তাত্ক্ষণিক সময়" শিরোনামের ক্লিপটিতে আপনি দ্বিতীয় মডিউল "প্রসঙ্গ বিষয়গুলি" তে ক্যামেরার সাদৃশ্যটির একটি ধাপে ধাপে পদক্ষেপ পাবেন'll