ডেটটাইম (ইউটিসি) বনাম স্টেট টাইমঅফসেট সংরক্ষণ করা


96

আমার সাধারণত একটি "ইন্টারসেপ্টর" থাকে যা / ডাটাবেস থেকে / ডাটাবেসে পড়া / লেখার আগে ডেটটাইম রূপান্তর (ইউটিসি থেকে স্থানীয় সময়, এবং স্থানীয় সময় থেকে ইউটিসি) হয়, তাই আমি DateTime.Nowউদ্বেগ ছাড়াই সিস্টেম জুড়ে (উপকরণ এবং তুলনা) ব্যবহার করতে পারি সময় অঞ্চল সম্পর্কে।

কম্পিউটারের মধ্যে ক্রমিককরণ এবং চলমান ডেটা সম্পর্কিত, ডেটটাইম সর্বদা ইউটিসি থাকায় বিরক্ত করার দরকার নেই।

আমি কি আমার তারিখগুলি (এসকিউএল ২০০ - - ডেটটাইম) ইউটিসি ফর্ম্যাটে সংরক্ষণ করা চালিয়ে যাবো বা এর পরিবর্তে আমি এটি DateTimeOffset(এসকিউএল ২০০ - - ডেটটাইমসেট) ব্যবহার করে সংরক্ষণ করব ?

ডাটাবেসে ইউটিসি তারিখগুলি (ডেটটাইম টাইপ) এত দিন ধরে কাজ করে আসছে এবং এটি পরিচিত, কেন এটি পরিবর্তন করবেন? সুবিধা কি?

আমি ইতিমধ্যে মত নিবন্ধের তাকিয়ে আছে এই এক , কিন্তু আমি 100% যদিও বিশ্বাস করছি। কোন চিন্তা?


সম্পর্কিত প্রশ্ন: স্ট্যাকওভারফ্লো.com
ওডে

4
আরও দেখুন: ডেটটাইম বনাম ডেটটাইম অফসেট -। নেট জন্য লেখা, তবে ধারণাটি এসকিউএল-তেও প্রযোজ্য।
ম্যাট জনসন-পিন্ট

উত্তর:


131

একটি বিশাল পার্থক্য রয়েছে, যেখানে আপনি একা ইউটিসি ব্যবহার করতে পারবেন না।

  • আপনার যদি এই মত একটি দৃশ্য আছে

    • একটি সার্ভার এবং বেশ কয়েকটি ক্লায়েন্ট (সমস্ত ভৌগোলিকভাবে বিভিন্ন সময় অঞ্চলগুলিতে )
    • ক্লায়েন্টরা ডেটটাইম তথ্য সহ কিছু ডেটা তৈরি করে
    • ক্লায়েন্টরা এটি কেন্দ্রীয় সার্ভারে সমস্ত সঞ্চয় করে
  • তারপরে:

    • ডেটটাইমসেট ক্লায়েন্টের স্থানীয় সময় এবং ইউটিসি সময়ের অফসেট ALSO সঞ্চয় করে
    • সমস্ত ক্লায়েন্টরা সমস্ত ডেটার ইউটিসি সময় এবং সেই জায়গার একটি স্থানীয় সময় জানতে পারে যেখানে তথ্যটি উদ্ভূত হয়েছিল
  • তবে:

    • ইউটিসি ডেটটাইম কেবলমাত্র ইউটিসি ডেটটাইম সঞ্চয় করে , তাই আপনার কাছে ক্লায়েন্টের অবস্থানের যেখানে স্থানীয় উত্সের সূচনা হয়েছিল সেখানে স্থানীয় সময় সম্পর্কিত তথ্য নেই
    • অন্যান্য ক্লায়েন্টরা সেই জায়গার স্থানীয় সময়টি জানেন না, যেখানে তারিখের সময়কালীন তথ্য এসেছে
    • অন্যান্য ক্লায়েন্টরা কেবল ডাটাবেস থেকে তাদের স্থানীয় সময় গণনা করতে পারেন (ইউটিসি সময় ব্যবহার করে) ক্লায়েন্টের স্থানীয় সময় নয়, যেখানে ডেটা উত্পন্ন হয়েছিল

সহজ উদাহরণটি হ'ল ফ্লাইট টিকিট রিজার্ভেশন সিস্টেম ... ফ্লাইটের টিকিটে 2 বার থাকা উচিত: - "ছাড়" সময় ("শহর থেকে" শহর সময়) - "অবতরণ" সময় ("গন্তব্য" শহরের টাইমজোন)


4
এটি কখন উপযুক্ত হবে সে সম্পর্কে আমি সবচেয়ে ভাল ব্যাখ্যাটি পড়েছি এবং আমাদের জন্য আমি অনেক কিছু পড়েছি এটি থেকে, এটি মনে হয় না। আমরা আমাদের বাহ্যিক ডেটার জন্য ইউটিসিতে সময় পাই এবং প্রয়োজনে আমরা অন্য উত্স থেকে অবস্থানটি জানি (এবং এটি কখনও হয়নি)। এটিকে এত সুস্পষ্ট বলে মনে করার জন্য ধন্যবাদ
অ্যান্ড্রু ব্যাকার

19
আপনি বলেছিলেন যে "ডেটটাইমসেটটি ইউটিসি সময় এবং ALSO ক্লায়েন্টের স্থানীয় সময় থেকে অফসেট", তবে ডেটটাইমসেট LOCAL সময় + অফসেট, বা ইউটিসি সময় + অফসেট সমান +0 সঞ্চয় করে।
Serhii Kyslyi

যদিও আপনি কেবল ডিটিও কে একটি ডিটিতে ফেলে দিতে পারেন যেহেতু ডিটি বেসটি ইউটিসি (যদিও এটি ডাটাবেস ব্যবহার করা প্রত্যেকের জন্য অতিরিক্ত পদক্ষেপ হবে, এবং কেবল ইউটিসি সময়কে একা ব্যবহার করার চেয়ে
তর্কযোগ্য

4
ডেটটাইম অফসেট "স্থানীয় সময় এবং ইউটিসি অফসেট", "ইউটিসি সময় এবং ইউটিসি অফসেট" নয় বলে মনে হয়। আপনি যদি ডেটটাইমে কাস্ট করেন বা ডেট পার্ট ফাংশনগুলির কোনও ব্যবহার করেন, আপনি স্থানীয় তারিখ এবং সময় উপাদানগুলি পান।
ট্রায়ঙ্কো

" সমস্ত ক্লায়েন্টরা সমস্ত ডেটার ইউটিসি সময় এবং সেই জায়গাগুলির স্থানীয় সময়ও জানতে পারে যেখানে তথ্য উত্পন্ন হয়েছিল" যদিও তারিখের ক্ষেত্রের অংশ হিসাবে সংরক্ষণ করা সেই ক্ষেত্রে অস্বাভাবিক বলে মনে করে। ব্যবহারের ক্ষেত্রে কী - তা হ'ল আপনি ইউটিসি ব্যবহার করবেন না এবং অফসেটটি InputLocationId(বা অনুরূপ নরমালাইজড সত্তা) টানবেন না। সেখানে গণনা জড়িত থাকতে হবে (হ্যালো, ব্যতিক্রমগুলি ... বিশেষত আপনি, ইন্ডিয়ানা ), তবে এটি এখনও একটি নির্বিচার প্রক্রিয়া - এবং তারপরে অ্যাপ্লিকেশনটির ডেটটাইম লজিকের ভারসাম্য সোজা।
ruffin

23

আপনি সমস্ত timesতিহাসিক সময়ের জন্য ইউটিসি ব্যবহার করা একেবারে সঠিক (যেমন ঘটনা রেকর্ডিং হয়েছে)) ইউটিসি থেকে স্থানীয় সময় যাওয়া সর্বদা সম্ভব তবে সবসময় অন্যভাবে হয় না।

স্থানীয় সময় কখন ব্যবহার করবেন? এই প্রশ্নের উত্তর দাও:

যদি সরকার হঠাৎ দিবালোকের সঞ্চয় পরিবর্তন করার সিদ্ধান্ত নেয়, আপনি কি এই ডেটাটি দিয়ে এটি পরিবর্তন করতে চান?

উত্তরটি "হ্যাঁ" হলে কেবল স্থানীয় সময় সঞ্চয় করুন। স্পষ্টতই এটি কেবল ভবিষ্যতের তারিখগুলির জন্য হবে এবং সাধারণত কেবল সেই তারিখগুলির জন্য যা কোনওভাবে লোককে প্রভাবিত করে।

কেন একটি সময় অঞ্চল / অফসেট সঞ্চয়?

প্রথমত, আপনি যদি এই রেকর্ড করতে চান যে অফসেটটি ব্যবহারকারীর জন্য অফসেটটি কী ছিল, তবে আপনি সম্ভবত এটি করছেন সবচেয়ে ভাল, অর্থাৎ লগইনে সেই ব্যবহারকারীর অবস্থান এবং সময় অঞ্চল রেকর্ড করে।

দ্বিতীয়ত আপনি যদি প্রদর্শনের জন্য রূপান্তর করতে চান তবে আপনার সেই সময় অঞ্চলটির জন্য সমস্ত স্থানীয় সময়ের অফসেট ট্রানজিশনের একটি টেবিল থাকা দরকার, কেবল বর্তমান অফসেটটি জেনে রাখা যথেষ্ট নয়, কারণ আপনি যদি ছয় মাস আগে কোনও তারিখ / সময় দেখিয়ে থাকেন তবে অফসেটটি হবে আলাদা হতে


4
Timeতিহাসিক তারিখের জন্য দিবালোকের সঞ্চয় সময় পরিবর্তনের সময় উইন্ডোজ ইউটিসি স্থানীয় সময় রূপান্তরকে বিবেচনা করে। সে ক্ষেত্রে আপনি কেন স্থানীয় সময় সঞ্চয় করতে চান তা আমি দেখতে পাচ্ছি না।
জ্যামিগেস

4
@ জামেগস উইন্ডোজ কেবলমাত্র "শেষ historicalতিহাসিক তথ্য" historতিহাসিকভাবে জানে (যেমন। নেট ডেটটাইম ডকুমেন্টেশনে ইঙ্গিত / উল্লেখ করা হয়েছে)। এটি ব্যাপক নয়।

4
অবশ্যই, আপনাকে ইভেন্টটির অবস্থানও সংরক্ষণ করতে হবে, অন্যথায় আপনি ঘটনাটি "স্থানীয় সময়" কী ঘটেছে তা বলতে পারবেন না।
কেউলেজে

20

একটি DATETIMEOFFSET আপনাকে স্থানীয় সময় এবং ইউটিসি সময়কে একটি ক্ষেত্রে সংরক্ষণ করার ক্ষমতা দেয়।

এটি কোনও উপায়ে প্রদর্শনের জন্য ডেটা প্রক্রিয়া করার প্রয়োজন ছাড়াই স্থানীয় বা ইউটিসি সময়ে খুব সাধারণ এবং দক্ষ প্রতিবেদনের অনুমতি দেয়।

এগুলি দুটি সবচেয়ে সাধারণ প্রয়োজনীয়তা - স্থানীয় প্রতিবেদনের স্থানীয় সময় এবং গ্রুপ রিপোর্টের জন্য ইউটিসি সময়।

স্থানীয় সময়টি DATETIMEOFFSET এর DATETIME অংশে সংরক্ষণ করা হয় এবং ইউটিসি থেকে অফসেটটি অফসেট অংশে সংরক্ষণ করা হয়, সুতরাং রূপান্তরটি সহজ এবং, যেহেতু ডেটা যে সময় থেকে প্রকাশিত হয়েছে সে সম্পর্কে কোনও জ্ঞানের প্রয়োজন নেই, সমস্ত ডাটাবেস স্তরে করা যেতে পারে ।

আপনার যদি মিলিসেকেন্ডে সময় নেওয়ার প্রয়োজন হয় না, যেমন কেবলমাত্র কয়েক মিনিট বা সেকেন্ডে, আপনি DATETIMEOFFSET (0) ব্যবহার করতে পারেন। DATETIMEOFFSET ক্ষেত্রের জন্য কেবল তখন 8 বাইট স্টোরেজ প্রয়োজন হবে - এটি একটি ডেটাটাইমের মতো।

কোনও ইউটিসি ডেটটাইমের পরিবর্তে একটি DATETIMEOFFSET ব্যবহার করা অতএব প্রতিবেদনের জন্য আরও নমনীয়তা, দক্ষতা এবং সরলতা দেয়।


খুব খারাপ সত্তা ফ্রেমওয়ার্কের কোনও ডেটটাইমসেট ক্ষেত্রের স্থানীয় সময়সীমার অ্যাক্সেসের কোনও উপায় নেই, যা নির্দিষ্ট স্থানীয় তারিখের জন্য জিজ্ঞাসা করা অসম্ভব করে তোলে।
ট্রায়ঙ্কো

@ ট্রাইঙ্কো আপনি কী বোঝাতে চেয়েছেন? উদাহরণ?
রিডলিন্ডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.