কেন ডেটাবেস থেকে স্ট্রিং হিসাবে তারিখগুলি ফেরান না?


41

একটি সাধারণ ওয়েব অ্যাপ্লিকেশনে, তারিখগুলি দৃ strongly়ভাবে টাইপ করা ডেটাবেস স্তর থেকে পুনরুদ্ধার করা হয় (উদাহরণস্বরূপ সি # তে একটি সিস্টেম হিসাবে। ডেটটাইম বিরোধী সিস্টেম.স্ট্রিং হিসাবে)।

যখন কোনও তারিখকে স্ট্রিং হিসাবে প্রকাশ করা প্রয়োজন (উদাহরণস্বরূপ কোনও পৃষ্ঠায় প্রদর্শিত), ডেটটাইম থেকে স্ট্রিংতে রূপান্তর উপস্থাপনা স্তরতে সম্পন্ন হয়।

কেন? ডেটেমটাইমকে ডাটাবেস স্তরটিতে স্ট্রিংয়ে রূপান্তর করা খারাপ জিনিস কেন?

আরও দেখুন চ্যাটে উত্তপ্ত বিতর্ক এবং মূল প্রশ্ন এই সব শুরু


73
আমাকে এটি জিজ্ঞাসা করতে দাও: আপনি কি কেবলমাত্র প্রতিটি একককে স্ট্রিংয়ে রূপান্তর করবেন? তারিখকে কী আলাদা করে তোলে?
বাগান মাথা

7
ভাল প্রশ্ন! অনুগ্রহ করে উত্তপ্ত বিতর্কটি এখানে দেখুন
জন উ

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

7
কখনও কখনও আপনার ডাটাবেসের বাইরে তারিখ গণিত করা প্রয়োজন। আপনার সমস্ত কিছু যদি স্ট্রিং হয় তবে অবশ্যই শক্ত।
এরিক কিং

14
আরেকটি সমস্যা - আপনার কী ধরণের স্ট্রিং দরকার? ডেটটাইমকে স্ট্রিং হিসাবে উপস্থাপন করার জন্য প্রচুর উপায় রয়েছে। আমার যদি এমন কোনও ডাটাবেস থাকে যা কেবলমাত্র বর্তমান সময়টি ফিরে আসে, যা পর্বের প্রথম দিক থেকে # সেকেন্ড হিসাবে উপস্থাপিত হয়, স্ট্রিং হিসাবে (উদাহরণস্বরূপ, বর্তমান সময়টি "1474496980")। এটা কি কার্যকর হবে? আপনি কি এর মতো একটি ডাটাবেস ব্যবহার করতে চান?
রিওয়ালক

উত্তর:


168

তারিখ, ডেটটাইমস এবং প্রকৃতপক্ষে অন্য যে কোনও টাইপ করা বস্তুটি সাধারণত তাদের সঠিকভাবে টাইপ করা ফর্ম্যাটে রেখে দেওয়া উচিত যতক্ষণ না আপনি এগুলি অন্য কোনও ধরণের তৈরি করার প্রয়োজন হয় - বিশেষত যখন সেই ধরণটি মানব পাঠযোগ্য ফর্ম হয় এবং বিশেষত যখন এটি ক্ষতিকারক / একতরফা রূপান্তর

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

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

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


26
ঘৃণ্য শব্দটি ব্যবহার করার জন্য +1। আমি আপনার বাধ্যতামূলক যুক্তি এবং ব্যাপক ব্যাখ্যার সাথে একমত, তবে সে কারণেই আমাকে লগ ইন করতে হয়েছিল এবং আপনাকে ভোট দিতে হয়েছিল।
অ্যাড্রিয়ান লারসন

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

তারিখগুলি প্রায়শই "এক্স দিন আগে" হিসাবে উপস্থাপিত হয়। সৌভাগ্য যে মূল মান ফিরে।
এজেন্ট_এল

5
আসুন আমরা ডিএসটি পরিবর্তন (এবং অন্যান্য অনুরূপ) বিষয়গুলিও ভুলে যাই না। হবে "নভেম্বর 6, 2016 1:30:26 পূর্বাহ্ণ" প্রথমবার বা দ্বিতীয় সময় যে এই তারিখ ও সময় ঘটে থাকতে হবে? ইউটিসি ডেটটাইম কমপক্ষে অনন্য এবং আপনি সর্বদা সেই সময়ের জন্য স্থানীয় উপস্থাপনায় অনুবাদ করতে পারেন - অন্যভাবে ফিরে যাওয়া সবসময় সম্ভব নয় possible
জে ...

3
Why? Because it is assumed that the type provides you with lots of handy built in functionalityআমার মতে এটি কেবল মাধ্যমিক। আসল কারণটি হ'ল টাইপটি আপনাকে কিছু কী তা বলে । একটি তারিখ না একটি স্ট্রিং, এটি শুধু একটি চিহ্নকারী পাঠযোগ্য পংক্তি মধ্যে সহজে অনুবাদ করতে হবে।
ডোভাল

53

তিনি ডেটা সময়কে স্ট্রিংয়ে রূপান্তর করতে ওয়েব সার্ভারটি ব্যবহার করতে বলছেন। আমি বলছি এটি ওয়েব সার্ভার নয়, ডাটাবেস সার্ভারে করুন। কেন আপনি ভাল মনে করেন? - এমটি হেড

আমি টাইপ জানতে চাই।

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

11/10/2016

এবং এটি একাদশ মাস বা দশম মাস কিনা তা জানা নেই।

তবে এটি আপনি যাচাই করেছেন। নিশ্চিতভাবেই আপনি এটি একটি বৈধকরণ প্রক্রিয়াগুলির মধ্যে রেখেছেন। তারিখটি পুরোপুরি সঠিক। তবে এখানে আমি এই জিনিসটি বজায় রাখছি এবং আমি জানি যে তারিখটি একটি স্ট্রিং। এই তারিখটি কী তা আমি আপনাকেও বলতে পারি না।

"আমাদের প্রভুর দুই হাজার ষোড়শ বছরের নভেম্বর মাসের দশম দিন।"

এটি একটি স্ট্রিং। আমাদের উপস্থাপনাগুলির একটিটির সেই বিন্যাসে প্রয়োজন। আপনি বলেছিলেন যে ডাটাবেসটি সমস্ত তারিখকে স্ট্রিংয়ে ডান করে দেয়? সাথে মজা আছে।

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

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

তেমনি উপস্থাপনা স্তরটি ডাটাবেসের অংশ নয় তাই ডাটাবেসের বিবরণে কোনও প্রতিবেদন তৈরি করা বুদ্ধিমানের কাজ নয়। প্রকারভেদে অভিনয় করা আরও শক্তিশালী।


এই উত্তরটি ঠিকানাগুলি স্টোরেজ স্ট্রিং হিসেবে। তবে এটি কোনও নেটিভ ডেট টাইপের তারিখ সংরক্ষণের সাধারণ প্যাটার্নটিকে সম্বোধন করে না, তবে কনভার্ট (টি-এসকিউএল) এর মতো ফাংশন ব্যবহার করে এসকিউএল কোয়েরিতে একটি স্ট্রিংয়ে ফর্ম্যাট করে, বা কোনও ডিবিএমএস সাধারণত তার তারিখগুলি সিরিয়াল করে তোলে যে কোনও প্রশ্নের বাইরে কনফিগারযোগ্য বিন্যাসে একটি স্ট্রিংয়ে প্রবেশ করুন। উদাহরণস্বরূপ: postgresql.org/docs/9.5/static/…
dcorking

এটি একটি প্রতিবেদন। এটি স্টোরেজ পরে ঘটে। আমার জন্ম তারিখকে আমার যুগে রূপান্তরিত করার মতো।
candied_orange

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

@dcorking নোট আপডেট।
candied_orange

মিলে আরও জল যুক্ত করে: কেবল ইনস্টলড বেসে এমন একটি সিস্টেম তৈরি করুন যা একাধিক টাইমজোনগুলিকে বিস্তৃত করে যেখানে পরম তাত্ক্ষণিকতা সর্বজনীন হয় এবং দেখুন যে আপনি স্ট্রিং </> টাইমস্ট্যাম্প রূপান্তরগুলি দিয়ে কতটা ভাল করছেন। সবচেয়ে খারাপ, লোকেরা তাদের নিজস্ব প্লাগইনগুলি তৈরি করতে এবং স্ট্রিং হিসাবে তাদের টাইমস্ট্যাম্প দেওয়ার জন্য একটি এক্সটেনশন পয়েন্ট তৈরি করে দেখুন যে এই টাইমস্ট্যাম্পগুলি কতটা সংবেদনশীল হবে!
নিউটোপিয়ান

19

স্থান

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

সার্বজনীন তারিখের ডেটাটাইপ থেকে স্থানীয়-নির্দিষ্ট স্ট্রিংয়ে রূপান্তরটি উপস্থাপনা স্তরে ঘটতে হবে কারণ এটি সেই স্তর যা জানে যে রূপান্তরটি কীভাবে সম্পাদন করা উচিত।


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

@ jpmc26 আমি পার্থক্যটি বুঝতে পারি না - মেইন কি মার্কিন যুক্তরাষ্ট্রে আলাদা তারিখের ফর্ম্যাট ব্যবহার করে?
পিট কিরখাম

2
@ পেটকিরখাম মেইন এবং মার্কিন পশ্চিম উপকূলটি 3 ঘন্টা ব্যবধানে সময় অঞ্চল ব্যবহার করে।
jpmc26

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

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

9

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


4

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


তথ্য দোকান

সীমাবদ্ধতাসমূহ

বাধা টাইপ করুন

প্রায় সব ডেটা স্টোরই ডেটাতে সীমাবদ্ধতা নির্দিষ্ট করার মঞ্জুরি দেয়, এতে টাইপের সীমাবদ্ধতা অন্তর্ভুক্ত। একটি DateTimeউদাহরণ নির্দিষ্ট করার অন্যতম প্রধান সুবিধা হ'ল সঞ্চিত ডেটা সেই ধরণের সীমাবদ্ধ থাকবে। স্টোরের মধ্যে কীভাবে ডেটা wasোকানো হয়েছিল তা নির্বিশেষে তারিখের সময় ব্যতীত অন্য কোনও কিছু প্রবেশ করা কখনই সম্ভব হবে না। আধুনিকগুলি বৃহত্তর সিস্টেমগুলির জন্য গুরুত্বপূর্ণ যেখানে একাধিক প্রক্রিয়া রয়েছে যা সরাসরি স্টোরের সাথে যোগাযোগ করে। এর মধ্যে 30 ফেব্রুয়ারির মতো ত্রুটিযুক্ত তারিখগুলি যুক্ত করার চেষ্টাও অন্তর্ভুক্ত রয়েছে (যে কোনও বছরের) ফেব্রুয়ারিতে কেবল একটি লিপ বছরে 29 দিন এবং অবধি লিপ বয়সের জন্য 28 দিন থাকতে পারে।

বৈধতা সীমাবদ্ধতা

বৈধতা সীমাবদ্ধতাগুলিও রয়েছে যা ডাটা স্টোরে প্রয়োগ করা যেতে পারে যেমন সন্নিবেশ করা তারিখটি বর্তমান তারিখের বেশি না হয় বা শেষের তারিখের আগে একটি শুরুর তারিখ উপস্থিত হয় তা নিশ্চিত করে like

অপারেশনস

বেশিরভাগ ডেটা স্টোরগুলি এমএস এসকিউএল সার্ভারের মতো DateAddবা কার্যকরী / ফাংশনগুলিতেও তৈরি করে DatePart। এটি স্টোরের মধ্যে থাকা অবস্থায় (নির্দিষ্ট প্রয়োগে এখনও পুনরুদ্ধার করা হয়নি) ফিল্টারিং বা নির্দিষ্ট ডেটা নির্বাচন শুরু করার অনুমতি দেয়।

সর্বজনীন স্বীকৃত ফর্ম্যাট

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

দ্রুততা

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

আবেদন

তথ্য এক্সেস

স্টোরের বিরুদ্ধে জিজ্ঞাসাবাদগুলি কার্যকর করা দেশীয় টাইপ সিস্টেমটি বিকাশকারী হিসাবে আরও সহজ হয়ে ওঠে, আর একবার, স্টোরেজ ফর্ম্যাট হিসাবে অনুমান করার দরকার নেই। প্রায় সমস্ত ডেটা স্টোর অ্যাপ্লিকেশন সরবরাহকারী ( উদাহরণস্বরূপ: ado.net ) দেশীয় প্রকারের উপর ভিত্তি করে যথাযথ প্যারামিটারাইজড ক্যোয়ারী তৈরির জন্য প্রক্রিয়া সরবরাহ করে S স্ট্রিং দিয়ে একই কাজ করা খুব জটিল এবং ভঙ্গুর / ত্রুটিযুক্ত প্রবণ হবে।

command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});

অপারেশনস

কোডে দেশীয় প্রকারগুলি System.Date। নেট টাইপের মতো মানক ক্রিয়াকলাপ সরবরাহ করে । অপারেশনগুলি সাধারণত তারিখগুলি যুক্ত করা, খেজুরের মধ্যে পার্থক্য সন্ধান করা ইত্যাদির মতো প্রকৃতিতে গাণিতিক হয় আবার স্ট্রিংয়ের ধরণগুলিতে সহজেই এটি সম্ভব হয় না।

উপস্থাপনা স্তর

স্থান

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

উদাহরণ 1

একটি ডেটটাইম উদাহরণটি ব্যবহারকারীর লোকেলের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ফর্ম্যাট করা যায়।

DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
উদাহরণ 2

দশমিক উদাহরণটি কোনও পরিমাণ (মুদ্রা) উপস্থাপন করতে পারে এবং ব্যবহারকারীর লোকেল এর পরে তাদের পছন্দ অনুযায়ী পরিমাণটি প্রদর্শন করা উচিত। একটি সি # অ্যাপ্লিকেশন তখন মানটি ব্যবহার করে প্রদর্শিত হতে পারে

amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))

এটি বিভিন্ন সংস্কৃতিতে ভিন্ন ভিন্ন সংখ্যা প্রদর্শন করার কারণে এটি সমালোচনা হতে পারে। মার্কিন সময়কালে (।) এবং কমা (,) এর সঠিক বিপরীত অর্থ নেদারল্যান্ডসের মতো।

অবস্থান

এটি DateTimeউদাহরণগুলির জন্য খুব নির্দিষ্ট । একটি তারিখ এবং সময় সময় একটি নির্দিষ্ট মুহূর্তে একটি ঘটনা প্রতিনিধিত্ব করে কিন্তু এটি সাধারণত তাদের নিজস্ব সময় অঞ্চল উপর নির্ভর করে ব্যবহারকারীর কাছে অবহিত / উপস্থাপন করতে হবে। উদাহরণ: একটি DateTimeদৃষ্টান্ত 2016-09-21T23:38:21.399Zহিসেবে প্রদর্শিত হতে পারে 9/21/2016 5:21 PMযুক্তরাষ্ট্রের পূর্ব টাইমজোন একটি ব্যবহারকারীর জন্য। এটি সম্পাদন করার জন্য অনেকগুলি উপায় রয়েছে তবে তারিখের সময় উদাহরণটি স্ট্রিং টাইপের হিসাবে মেমরিতে রাখা হয় বা ডেটা স্টোরকে স্ট্রিংয়ের ধরণ হিসাবে রাখা হয় তবে এটি অসম্ভবের পাশে চলে যায়।


সাধারণ নিয়ম

কোনও অ্যাপ্লিকেশনটির জন্য সাধারণ 2 নিয়মগুলি অনুসরণ করে যখন কোনও আদিম ধরণের স্ট্রিং উপস্থাপনায় রূপান্তরিত করার বিষয়টি আসে সেগুলি হয়

  • ইনপুট গ্রহণ করার সময় প্রোগ্রাম স্ট্যাকের (সাধারণত উপস্থাপনা স্তরে) যত তাড়াতাড়ি সম্ভব সেই ইনপুটটিকে সঠিক আদিম ধরণের রূপান্তরিত করুন When
  • প্রদর্শিত তথ্য পুনরুদ্ধার করার সময়, প্রোগ্রাম স্ট্যাকের (যত তাড়াতাড়ি, সাধারণত উপস্থাপনা স্তরে) যত তাড়াতাড়ি দেরী উপাত্তটিকে স্ট্রিং উপস্থাপনায় রূপান্তর করুন

0

যতক্ষণ না আপনি আপনার তারিখের জন্য একটি দ্বি-দ্বিধাবিভক্ত বিন্যাস ব্যবহার করছেন ততক্ষণ এটি করার ক্ষেত্রে কোনও সমস্যা নেই (এটি পরিষেবাগুলিতে সর্বদা হয়ে থাকে)। দ্ব্যর্থহীনতার দ্বারা, আমি বোঝাতে চাইছি কেবল তারিখটি পরিষ্কার নয় (যেমন এমএম / ডিডি বনাম ডিডি / এমএম) তবে এটির টাইমজোন কী রয়েছে up । আমি দৃ strongly়ভাবে ইউটিসি ভিত্তিক সময়ের স্ট্রিং পছন্দ করি।

পেশাদাররা:

  • স্ট্যান্ডার্ড ভিত্তিক তারিখ / সময় স্ট্রিংগুলি বহনযোগ্য এবং বোঝা সহজ
  • প্রায়শই ডিবিতে তারিখগুলিতে একটি সময়ের উপাদান থাকে। এটি যদি আপনার ডেটাতে অর্থবহ না হয় তবে এটি আসলে জিনিসগুলিকে সরল করতে পারে।

কনস:

  • তথ্য আকার। কোনও ডিবিতে একটি তারিখের অভ্যন্তরীণ ফর্ম্যাট সাধারণত date তারিখের স্ট্রিং রেন্ডারিংয়ের চেয়ে অনেক কম স্থান ব্যবহার করবে।
  • আপনি সাধারণত ক্লায়েন্টের সাথে এটি একটি আসল তারিখ বা সময় কাঠামোতে পেতে চাইছেন যাতে পার্সিংয়ে অতিরিক্ত সময় থাকতে পারে।

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

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