PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

पोस्टग्रेज डेटाबेस में विशिष्ट समय क्षेत्र हैंडलिंग

यह मुद्दा अमेज़ॅन आरडीएस से असंबंधित लगता है:इसे पोस्टग्रेएसक्यूएल द्वारा उपयोग किए जाने वाले सम्मेलन के साथ करना है। इस मामले में, आप करते हैं समय क्षेत्र का नाम . है पीछे की ओर। आपका मतलब है 'UTC-01' जहाँ आप <स्ट्राइक>'UTC+01' लिखते हैं .
मैनुअल :

तो समय क्षेत्र स्ट्रिंग SET TIME ZONE के लिए उपयोग किया जाता है (और SHOW timezone . का प्रदर्शन , तदनुसार) या AT TIME ZONE निर्माण विपरीत चिह्न . का उपयोग करें timestamp में जो दिखाया गया है उसका (with time zone ) शाब्दिक! यह एक ओर ISO और SQL मानक और दूसरी ओर POSIX के बीच एक बहुत ही दुर्भाग्यपूर्ण असहमति है। (मुझे लगता है कि पॉज़िक्स को दोष देना है।) देखें:

लेकिन 'CET' या 'UTC-01' दोनों अब भी संभावित रूप से गलत हैं पेरिस के लिए क्योंकि वे डेलाइट सेविंग टाइम . के लिए नियम नहीं ले रहे हैं खाते में।
(डीएसटी मानव जाति के इतिहास में सबसे नैतिक अवधारणाओं में से एक है।)

पेरिस (अधिकांश यूरोप की तरह) सर्दियों के दौरान सीईटी और गर्मियों के दौरान सीईएसटी का उपयोग करता है। 'CET' . के साथ आपके परीक्षण बस नवंबर में काम करने के लिए होता है। अगर आप गर्मी के दिनों में भी यही कोशिश करते हैं, तो आपको गलत परिणाम मिलता है।

सुरक्षित रहने के लिए, हमेशा समय क्षेत्र नाम . का उपयोग करें 'Europe/Paris' , जो डीएसटी नियमों पर विचार करता है। कॉल अधिक महंगी है।

फ़ंक्शन current_time यदि आपकी समय क्षेत्र सेटिंग का कोई अर्थ है, तो डीएसटी नियमों को ध्यान में रखता है। लेकिन 'UTC-01' एक सादा समय ऑफसेट है। मैं कभी भी डेटा प्रकार time with time zone का उपयोग नहीं करता हूं या current_time शुरुआत के लिए। मैनुअल एक बार फिर:

विचार करें:

SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC+01' AS plus_wrong
     , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'UTC-01' AS minus_right
SELECT '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'CET'    AS cet_winter
     , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CEST'   AS cest_summer
     , '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'CET'    AS cet_no_dst  -- CET wrong!
SELECT '2016-06-06 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_summer
     , '2016-01-01 00:00+0'::timestamptz AT TIME ZONE 'Europe/Paris' AS paris_winter

संबंधित:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं पोस्टगिस फाइलों में प्रदर्शित करना चाहता हूं जो 10,000 मीटर से कम हैं और उनकी गणना की गई दूरी

  2. मैं यह देखने के लिए एक पायथन यूनिकोड स्ट्रिंग कैसे देख सकता हूं कि यह *वास्तव में* उचित यूनिकोड है?

  3. सक्रिय रिकॉर्ड:JSON क्वेरी

  4. Amazon S3 से JSON फ़ाइल के बड़े आकार को पढ़ने में रीड () विधि का उपयोग करते समय मेमोरी एरर

  5. किसी अन्य तालिका में डेटा को एक कॉलम से तीन कॉलम में कैसे विभाजित करें? एसक्यूएल