পোস্টগ্রিতে, timestamp with time zone
সংক্ষেপে timestamptz
এবং timestamp without time zone
হিসাবে সংক্ষিপ্ত করা যেতে পারে timestamp
। আমি সরলতার জন্য সংক্ষিপ্ত প্রকারের নামগুলি ব্যবহার করব।
ইউনিক্স টাইমস্ট্যাম্পের timestamptz
মতো পোস্টগ্রিজের কাছ থেকে now()
পাওয়া সহজ, যেমনটি আপনি বলেছেন ঠিক:
select extract(epoch from now());
এগুলি timestamptz
সহ যেকোন ধরণের থেকে নিখুঁত সময় পাওয়ার বিষয়ে আপনার যা জানা দরকার তা হ'ল now()
।
আপনার যদি timestamp
ক্ষেত্র থাকে তখন বিষয়গুলি জটিল হয়ে যায় ।
আপনি যখন সেই ক্ষেত্রের timestamptz
মতো ডেটা রাখবেন now()
, এটি প্রথমে একটি নির্দিষ্ট টাইমজোনতে রূপান্তরিত হবে (হয় স্পষ্টভাবে at time zone
বা সেশন টাইমজোন রূপান্তর করে) এবং সময় অঞ্চল তথ্য বাতিল করা হয় । এটি আর কোনও পরম সময়কে বোঝায় না। এ কারণেই আপনি সাধারণত টাইমস্ট্যাম্পগুলি সংরক্ষণ করতে চান না timestamp
এবং সাধারণত ব্যবহার করতে চান timestamptz
- সম্ভবত কোনও টাইমজোন একটি নির্দিষ্ট তারিখে সন্ধ্যা at টায় একটি চলচ্চিত্র প্রকাশিত হয় , এটি ব্যবহারের ক্ষেত্রে।
আপনি যদি কেবলমাত্র একক সময় জোনে কাজ করেন তবে আপনি (ভুল) ব্যবহার করে পালিয়ে যেতে পারেন timestamp
। রূপান্তরটি timestamptz
ডিএসটি মোকাবেলা করার জন্য যথেষ্ট চালাক এবং রূপান্তরকরণের জন্য বর্তমান সময় অঞ্চলে থাকার জন্য টাইমস্ট্যাম্পগুলি ধরে নেওয়া হয়। জিএমটি / বিএসটি-র জন্য এখানে একটি উদাহরণ রয়েছে:
select '2011-03-27 00:59:00.0+00'::timestamptz::timestamp::timestamptz
, '2011-03-27 01:00:00.0+00'::timestamptz::timestamp::timestamptz;
/*
|timestamptz |timestamptz |
|:---------------------|:---------------------|
|2011-03-27 00:59:00+00|2011-03-27 02:00:00+01|
*/
DBFiddle
তবে, নিম্নলিখিত বিভ্রান্তিকর আচরণটি নোট করুন:
set timezone to 0;
values(1, '1970-01-01 00:00:00+00'::timestamp::timestamptz)
, (2, '1970-01-01 00:00:00+02'::timestamp::timestamptz);
/*
|column1|column2 |
|------:|:---------------------|
| 1|1970-01-01 00:00:00+00|
| 2|1970-01-01 00:00:00+00|
*/
DBFiddle
এটি কারণ :
পোস্টগ্রাইএসকিউএল কখনই আক্ষরিক স্ট্রিংয়ের বিষয়বস্তু তার ধরণ নির্ধারণের আগে পরীক্ষা করে না এবং তাই উভয়কে […] টাইম জ্যাম ছাড়াই টাইমস্ট্যাম্প হিসাবে বিবেচনা করবে। আক্ষরিককে টাইম জোনের সাথে টাইমস্ট্যাম্প হিসাবে বিবেচনা করা হয় তা নিশ্চিত করার জন্য, এটিকে সঠিক স্পষ্ট ধরণ দিন ... একটি আক্ষরিক যা টাইম জোন ছাড়াই টাইমস্ট্যাম্প হিসাবে নির্ধারিত হয়েছে, পোস্টগ্র্যাস এসকিউএল নিঃশব্দে কোনও সময় অঞ্চল ইঙ্গিত উপেক্ষা করবে