টাইমজোন ভিত্তিক ডেটটাইম সংরক্ষণের সেরা অনুশীলন


16

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

উত্তর:


33

অ-গণনামূলক প্রোগ্রামিংয়ের অন্যতম শক্ত সমস্যার স্বাগতম - শেষ ব্যবহারকারীদের সঠিকভাবে তারিখ এবং সময় উপস্থাপন করা।

বাস্তবে, টাইমস্ট্যাম্পগুলি কীভাবে ব্যাখ্যা করা হবে তা নির্ধারণ না করে স্থির একক উপস্থাপনায় সংরক্ষণ করা উচিত, কারণ আপনি যতই চেষ্টা করুন না কেন, আপনার কাছে সবসময় দ্বিধাহীন মামলা থাকবে এবং আপনি কোনও নির্দিষ্ট প্রতিনিধিত্ব ছাড়াই এগুলি সমাধান করতে পারবেন না। এবং আপনি ব্যবহারের ক্ষেত্রে সবচেয়ে খারাপ ক্ষেত্রে একটি বেছে নিয়েছেন - অ্যাপয়েন্টমেন্টের সময় নির্ধারণ করে। সাধারণ ব্যবহারের ক্ষেত্রে সবচেয়ে খারাপ পরিস্থিতি হ'ল বিমান ভ্রমণ, যেখানে কোনও ট্রিপ এক সময় অঞ্চলে শুরু হয়ে অন্য অঞ্চলে শেষ হতে পারে, এটি পূর্ববর্তী স্থানীয় সময়ে সম্ভব possible

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


1
+1 টি। এবং এটি নমনীয়। একটি সাধারণ, ধারাবাহিক, সর্বজনীন মানক রেফারেন্স সময় থাকা - যে কোনও স্থানীয় অঞ্চল "ডেরেফারেন্সিং" সঠিকভাবে করা হবে।
রাডারবব

প্রকৃতপক্ষে, অ্যাপয়েন্টমেন্টের সময় নির্ধারণের কয়েকটি সময় আপনি যখন এটি ইউটিসি হিসাবে না সঞ্চয় করতে পারেন তার মধ্যে একটি : যদি ডিএসটি বিধি পরিবর্তন হয় (বা ইউটিসি থেকে অফসেট), অ্যাপয়েন্টমেন্টের সময়টি কী ঘটে? বেশিরভাগ ক্ষেত্রে, আপনি অ্যাপয়েন্টমেন্টের সময়টি স্থানীয়ভাবে একই থাকতে চান, যার অর্থ ইউটিসি মান পরিবর্তন হয়। আপনি সম্ভবত "টাইমআইনটাইমজোন + টাইমজোন" উপস্থাপন করে এমন একটি মান সঞ্চয় করতে চান যা থেকে আপনি ইউটিসি সহজেই অর্জন করতে পারেন। ক্রস-টাইমজোন শিডিউলিং (এয়ারলাইন্সের মতো) এর সীমাবদ্ধতা রয়েছে যা সম্ভবত উভয়টির সংমিশ্রণ ব্যবহার করা হবে।
ক্লকওয়ার্ক-মিউজিক

1
ওহ, এটি এর চেয়েও খারাপ হয়ে যায়। আমি নিয়মিতভাবে অন্যান্য জাতির সহকর্মীদের সাথে বৈঠক করি যাদের সময় পরিবর্তনের নিয়ম আমার চেয়ে পৃথক। যখন এটি হয়, সঠিক উত্তর কি? আসলে, কোনও কম্পিউটার জানতে পারে না :-(
রস প্যাটারসন

3

তারিখ / সময় তথ্য মোকাবেলার সবচেয়ে সহজ উপায় আপনার আবেদনের প্রয়োজনীয়তার উপর নির্ভর করে।

যদি তারিখ এবং সময় ব্যবহারকারীর দ্বারা প্রবেশ করানো হয় এবং সার্ভারটি সেই তারিখ / সময় তথ্য দিয়ে কোনও ডাটাবেজে সংরক্ষণ ব্যতীত কোনও প্রক্রিয়াজাতকরণ না করে এবং প্রবেশের সময়টি যে স্থানটি দেখা হয় তার সাথে মানিয়ে যায় এমন কোনও প্রত্যাশা নেই (উদাহরণস্বরূপ , ব্যবহারকারী "8:00 অপরাহ্ন" প্রবেশ করিয়েছিল এবং এটি বিশ্বের যেখানেই দেখা যায় নির্বিশেষে এটি "8:00 PM" হিসাবে প্রদর্শিত হবে), তবে সবচেয়ে সহজ উপায় হ'ল ডেটটাইম স্থানীয় সময় হিসাবে কোনও সময় অঞ্চল তথ্য ছাড়াই সংরক্ষণ করা।

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


"স্থানীয় সময়ে এটি সঞ্চয় করুন" এর জন্য -1, "এটি ইউটিসিতে সঞ্চয় করুন" এর জন্য +1
রস প্যাটারসন

@ রোসপ্যাটারসন: "স্থানীয় সময়ে এটি সংরক্ষণ করুন" "এর জন্য আপনি কী আপনার নিজের -1 ব্যাখ্যা করতে পারেন? আমি কৌতূহল বোধ করি কেন এটির একটি খারাপ ধারণা হওয়া উচিত, এটি দিয়ে আমি যে শর্ত দিয়েছিলাম given
বার্ট ভ্যান ইনজেন শেেনা

1
উদাহরণস্বরূপ, ব্যবহারকারী-স্থানীয় সময় ব্যবহারের অর্থ প্রতিটি মান কার্যকরভাবে কয়েক ডজন বিভিন্ন ডেটা ধরণের এক। যার অর্থ আপনি তাদের উপর "TIMESTAMP> '2013-08-27T12: 00: 00'" এর মতো ডেটাবেস ক্রিয়াকলাপ আকর্ষণীয় করতে পারবেন না। এমনকি এর অর্থ হ'ল কখন এবং কখন ডাইটলাইট সেভিং টাইম রূপান্তরগুলি প্রয়োগ করতে হয় তা আপনি জানেন না।
রস প্যাটারসন

@ রোসপ্যাটারসন: আপনাকে ধন্যবাদ আমি সম্মত হই যে বেশিরভাগ ক্ষেত্রে স্থানীয় সময় সঠিক সমাধান নয়।
বার্ট ভ্যান ইনজেন শেনাও

2

এটি গুরুত্বপূর্ণ যে আপনি দুটি সম্পর্কিত ধারণার সাথে মিলিত না হন।

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

অন্য ধারণাটি হ'ল "সময়ের অভিব্যক্তি" যেমন "প্রতি মঙ্গলবার 8:00 অপরাহ্ন"। আপনি নির্দিষ্টভাবে লোকদের অ্যাপয়েন্টমেন্ট শিডিউল করার অনুমতি দেওয়ার কথা উল্লেখ করেছিলেন এবং যদি আপনার পুনরাবৃত্ত অ্যাপয়েন্টমেন্টগুলি থাকে তবে আপনার মত প্রকাশের প্রয়োজন। আমি কোনও স্ট্যান্ডার্ড এক্সপ্রেশন ভাষা জানি না, তবে আপনি যা ব্যবহার করেন না কেন এটি নির্দিষ্ট করে দেওয়া ব্যক্তির টাইম জোনের সাথে সম্পর্কিত। এই সুস্পষ্ট উদাহরণটি তৈরি করা ভাল হবে "প্যাসিফিক টাইম জোনে প্রতি মঙ্গলবার 8:00 মিনিট"। সময়ের অভিব্যক্তির ক্ষেত্রে আপনি এটিকে সর্বদা স্ট্রিং হিসাবে সংরক্ষণ করেন এবং কোনও সিস্টেমের সময় বিন্যাসকে কখনই জড়িত করেন না।

আমার ব্লগে এটির আরও আলোচনা দেখুন


1

এখানে অনেক উত্তর ইউটিসি হিসাবে সংরক্ষণের ইঙ্গিত দেয়। তবে এটির সাথে সত্যই সাবধানতা অবলম্বন করুন। উদাহরণস্বরূপ, আপনি যদি 12:00 এ অ্যাপয়েন্টমেন্টের সময় নির্ধারণ করেন তবে দিবালোক সংরক্ষণের সময় পরিবর্তনের পরে অ্যাপয়েন্টমেন্টটি ঘটে তবে কী হবে? ইউটিসি অ্যাপয়েন্টমেন্ট সঞ্চিত থাকাকালীন সক্রিয় ছিল কিনা সে সম্পর্কে কোনও তথ্য রাখে না। প্রচুর বড়, বিখ্যাত সিস্টেমগুলি এই ত্রুটি করেছে, যেখানে কোনও গ্রীষ্ম গ্রীষ্মে সকাল ৯ টায় একটি ইমেল প্রেরণ করে এবং শীতকালে প্রেরিত সময়টি সকাল ৮ টা দেখায়, কারণ ইউটিসি থেকে ফিরে গণনাটি আপনি ডেটটাইমের দিকে তাকানোর সময় নির্ভর করে, ডেটটাইম রেকর্ড করা হয়নি যখন না।

আপনার ব্যবহারকারী ধরে রাখতে চান যে তিনি সর্বদা যে সময়টি বেছে নিয়েছেন তা আরও অনেক ভাল। কোনও ইউটিসি রূপান্তর নেই, কোনও সময় রূপান্তর নেই, টাইমজোন তথ্য নেই, কিছুই নেই। ২১ শে মার্চ ২০১ 2016 তারিখে 08:00 থেকে 12:00 অবধি অ্যাপয়েন্টমেন্ট করা ঠিক। স্থানীয় সময় বা ইউটিসি সময় না ব্যবহার করুন, তবে অনির্দিষ্ট সময় (জসনে এটি জেড বা + নেই, মূলত:। নেট এ ডেটটাইম.কিন্ড = ডেটটাইমকিন্ড.অনস্পষ্ট)।

অবশ্যই, যদি আপনার ব্যবহারের ক্ষেত্রে দেখা যায় যে আপনি এমন একটি সংস্থা যা বিভিন্ন সময় অঞ্চল থেকে কারও সাথে বৈঠক করে এবং আপনি এই কোম্পানির ক্যালেন্ডারে এই তথ্যটি দেখতে চান, তবে ব্যবহারকারীদের তাদের সময়সীমার সময়টি দেখার অনুমতি দিন, এটি আরও জটিল হয়ে ওঠে। বিভিন্ন সময় অঞ্চল (সরবরাহকারী এবং গ্রাহক) বিভিন্ন ব্যক্তির জন্য সময়টি সঠিক হতে হবে।

এই ক্ষেত্রেগুলিতে, আপনি এমনকি অ্যাপয়েন্টমেন্টটি কখন ডেটাবেজে সংরক্ষণ করা হয়েছিল, কোন টাইমজোনে এবং যদি এতে ডিএসটি অন্তর্ভুক্ত ছিল বা নাও রেকর্ড করতে পারেন। এইভাবে, আপনি সর্বদা স্থানীয় সময়কে অন্য যে কোনও কিছুর কাছে গণনা করতে পারেন, এটি এখন কী হবে বা historতিহাসিকভাবে এটির উদ্দেশ্য কী ছিল। কারণ সময় অঞ্চলগুলি স্থিতিশীল নয়, জিনিসগুলি আরও জটিল করে তোলে।

ভাগ্যক্রমে, এখানেই http://nodatime.org/ এর মতো গ্রন্থাগারগুলি আসে এবং এটির সুপারিশ করা হয়। তারা আরও অনেক ধারাবাহিকভাবে তারিখগুলি নিয়ে কাজ করে। তারপরেও আমি ইন্টারফেস ব্যবহার করে আপনার সমস্ত ডেটটাইম ভেরিয়েবল এবং যুক্তিগুলিকে আপনার নিজের মোড়কে মোড়ানোর পরামর্শ দেব যাতে তাদের বিদ্রূপ করা যায় এবং তারপরে আপনি পরে যুক্তি স্যুইচ করতে পারেন।


আমি আপনার সিদ্ধান্তে একমত নই, তবে দিনের বেলা সঞ্চয়ী পরিবর্তন পরিবর্তিত দুপুরে একটি সভা একটি বিশেষ চ্যালেঞ্জ, যেমন দুপুরে সাপ্তাহিক সভা হবে ভবিষ্যতে কয়েক বছর বুক করা book
বেন্ট করুন

" অবশ্যই, যদি আপনার ব্যবহারের ক্ষেত্রে দেখা যায় যে আপনি এমন একটি সংস্থা যা বিভিন্ন টাইম অঞ্চলগুলির কারও সাথে সভা করে এবং আপনি এই কোম্পানির ক্যালেন্ডারে এই তথ্যটি দেখতে চান, তবে ব্যবহারকারীদের তাদের সময়সীমার সময়টি দেখার অনুমতি দিন, এটি আরও জটিল হয়ে ওঠে "" - এটি প্রতিটি সংস্থার থেকে অনেক বেশি। চীন এবং ভারতের বাইরের খুব কম সংস্থাই ক্রস-টাইমজোন অ্যাপয়েন্টমেন্টগুলি উপেক্ষা করতে পারে।
রস প্যাটারসন 22

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

কমপক্ষে আপনি এখনও, সঠিকভাবে, ইউটিসি তে রূপান্তর করতে পারেন। আপনি সর্বদা প্রাক তথ্য থেকে এই তথ্যটি থেকে একটি গণনা টেবিল বা মান তৈরি করতে পারেন। তবে আপনি কখনই অন্য পথে যেতে পারবেন না। নোট করুন যে এসকিউএল 2016 এটিকে স্থানীয়ভাবে সমর্থন শুরু করে, যদিও দুর্ভাগ্যক্রমে এটি এখনও - নির্ভর করে অন্তত historতিহাসিকভাবে - নিখুঁতভাবে সঠিক রেজিস্ট্রি ডেটা নয় - তবে এটি আরও একটি উন্নতি।
অরউইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.