2009-02-16 11 views
6

मैं postgresql 8.3 का उपयोग कर रहा हूं और मैं किसी विशेष टाइमस्टैम्प (तालिका में एक कॉलम) का टाइमज़ोन जानना चाहता हूं।postgresql में एक टाइमस्टैम्प का टाइमज़ोन कैसे जानें 8.3

प्रलेखन में मैं कीवर्ड "timezone"

पाया है लेकिन मुझे समझ नहीं आता कैसे तालिका के एक कॉलम में यह लागू करने के लिए। क्या यह संभव है ?

उत्तर

10

मुझे लगता है कि आपके पास ct नामक एक कॉलम है जिसमें तालिका TIMESTAMPTZ है। फिर आप इसका उपयोग कर सकते हैं:

SELECT EXTRACT(TIMEZONE FROM ct) FROM t; 

सेकंड में टाइमज़ोन ऑफ़सेट प्राप्त करने के लिए। यह आपको UTC/GMT से देता है जिसका अर्थ है GMT+1, CET या जो भी हो। लौटाया गया मूल्य आपके TIMEZONE सेटिंग पर निर्भर करता है।

नमूना (मैं जर्मनी में रहते हैं, वास्तविक समय क्षेत्र IST GMT+1/CET):

test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz; 
     timestamptz  
------------------------ 
2008-01-01 18:00:00+01 

test=# set timezone to 'gmt'; 
SET 
test=# select '2008-01-01 12:00:00 GMT+5'::timestamptz; 
     timestamptz  
------------------------ 
2008-01-01 17:00:00+00 

आप इसे देख सकते हैं हमेशा के लिए कॉन्फ़िगर समय क्षेत्र में कुछ भी आउटपुट। तो ऑफसेट आपको EXTRACT(TIMEZONE FROM ...) के साथ मिलेगा TIMEZONE सेटिंग पर निर्भर करता है। INSERT पर दिया गया टाइमज़ोन खो गया है, क्योंकि इसे सहेजने के लायक नहीं है। मायने रखता है कि सब कुछ सही है और यह TIMEZONE सेटिंग पर निर्भर नहीं होना चाहिए। PostgreSQL बहुत अच्छी तरह से करता है।

5

"पोस्टग्रेएसक्यूएल बहुत अच्छा करता है।"

मुझे वास्तव में PostgreSQL पसंद है, लेकिन इस विशेष सुविधा में यह ठीक से नहीं करता है। टाइमज़ोन न केवल जीएमटी के लिए ऑफसेट है। टाइमज़ोन राजनीतिक नियमों के लिए तंग है जो डेलाइट सेविंग का तात्पर्य है। चूंकि एक ही ऑफसेट और विभिन्न डेलाइट सेविंग नियमों के साथ बहुत सारे समय क्षेत्र हैं - जब पीजी मूल टाइमज़ोन के बारे में भूल जाता है तो यह वास्तव में जानकारी खो देता है।

व्यक्तिगत रूप से मैं 'अमेरिका/न्यू_यॉर्क' रूप में महत्वपूर्ण तिथियों के लिए अलग-अलग मूल टाइमज़ोन स्टोर करता हूं। अगर किसी के पास बेहतर समाधान है - इसका स्वागत है।

+7

हां करते हैं, और स्नातकोत्तर प्रकार का नाम 'समय क्षेत्र के साथ टाइमस्टैम्प' भ्रामक है। डेटाबेस में वास्तव में सहेजी गई जानकारी 'टाइमज़ोन के बिना टाइमस्टैम्प' से समान है। एकमात्र चीज जो बदलती है वह यूटीसी से/पर उड़ान भरती है जो आपके वैश्विक टाइमज़ोन इनपुट या आउटपुट पल पर थी या नहीं। तो पीजी प्रकार 'टाइमज़ोन के साथ टाइमस्टैम्प' टाइमज़ोन जानकारी बचाओ नहीं। – vaab

0

चूंकि टाइमस्टैम्प को ज़ुलू/जीएमटी समय में तत्काल समय के लिए दोबारा शुरू किया जाता है, जो कभी भी ऑफसेट को बदलता नहीं है (क्योंकि यह संदर्भ है), टाइमज़ोन रिकॉर्ड करना आवश्यक नहीं है। आपको पिछली, वर्तमान या भविष्य में ऑफोपेटिक टाइम ज़ोन ऑफसेट में ऑफसेट को केवल जोड़ना/घटाना होगा।

आप DO उस स्थान पर सटीक भौगोलिक टाइमज़ोन को उस स्थान पर प्रभावी रूप से जानने की आवश्यकता है जो इस समय लागू होता है, जो पिछले और वर्तमान उद्देश्यों के लिए लागू होता है।

भविष्य के अवसरों के लिए समय के उद्देश्यों के लिए, यह अधिक समस्याग्रस्त हो सकता है। हालांकि यह अभी भी काम करना चाहिए। सूर्यास्त के बारे में सोचो। यदि कुछ स्थान पृथ्वी पर सूर्यास्त @ मध्यरात्रि ZULU समय है (कहीं उत्तरी अटलांटिक महासागर या उत्तरी कनाडा में उत्तरी गोलार्ध में सर्दियों में अलास्का), और उस समय उस स्थान पर 8 बजे (-4: 00 ऑफ़सेट) माना जाता है जिस क्षण आप इसे सिस्टम में रिकॉर्ड करते हैं और आप इसे सर्दियों-डेट-इन-भविष्य में 8:00 बजे के रूप में रिकॉर्ड करते हैं, इसे डेटाबेस में 24:00 GMT के रूप में रिकॉर्ड किया जाएगा।

अब, पृथ्वी पर वह स्थान अपने * एसएस को बालों को प्राप्त करता है और भौगोलिक संबंधित समय गणना पर अपनी नाक अंगूठे बनाता है, और अपने समय क्षेत्र - '+11: 55' कहता है।तो उनके लिए जब इंग्लैंड में मध्यरात्रि (जीएमटी आधी रात) है, तो वे इसे 11:55 बजे कॉल करना चाहते हैं, पूरी तरह से उनकी पसंद। जब कोई कंप्यूटर भविष्य में उस स्थान को उस स्थान के लिए प्रदर्शित करना चाहता है (यानी वह भूगर्भीय टाइमज़ोन), तो वह इसे 11:55 बजे कॉल करेगा, भले ही सूर्य स्थापित हो। और निश्चित रूप से, यह उस दिन का दिन होगा जब आपने इसे योजना बनाई थी :-) उनकी समस्या।

1

Postgres में मूल इनपुट समय क्षेत्र खो दिया है, भले ही आप समय क्षेत्र डेटा प्रकार के साथ टाइमस्टैम्प में datetime मूल्य की दुकान।

नुकसान:
कहते हैं, जब लोग पूरी दुनिया में उनके फेसबुक एप्लिकेशन का उपयोग करता है, तो मैं datetime डेटा की (समय क्षेत्र की जानकारी के साथ) है। अब मैं उन मानों को टाइमस्टैम्प में समय क्षेत्र डेटा प्रकार के साथ संग्रहीत करता हूं। एक यादृच्छिक दिन मैं देखना चाहता हूं कि रात में लोगों की तुलना में सुबह में लोग अपने एफबी ऐप का कितना उपयोग करते हैं और यदि देश भर में एक ही प्रवृत्ति देखी जाती है। लेकिन प्रतीक्षा करें, अब मेरे पास टाइमज़ोन जानकारी नहीं है। डीसी में बैठकर, मैं क्या देख सकता हूं कि दुनिया भर में गतिविधि 10am ईएसटी थी जब गतिविधि पूरी दुनिया में फैली हुई थी।

लाभ:
आप एक ही समय क्षेत्र के टाइमस्टैम्प लेकिन एक साथ दो datasources की तुलना कर रहे हैं, जबकि अन्य यह यूटीसी को परिवर्तित करके संग्रहीत क्या स्थानीय घड़ी दिखाया जा रहा था के रूप में जमा किया गया था। यहां आप क्या कर सकते हैं बस टाइमस्टैम्पज़ डेटाटाइप में टाइमस्टैम्प स्टोर करें और बताएं कि यह किस समय क्षेत्र से संबंधित है और फिर आप उन्हें आसानी से तुलना कर सकते हैं।
उदाहरण के लिए,
पीएसटी टाइमज़ोन में एक गतिविधि 2014-10-19 10:23:54 पर दर्ज की गई थी। अब दो अलग-अलग डेटा स्रोतों ने इसे अलग से संग्रहित किया है। डेटासॉर 1 ने इसे 2004-10-19 10:23:54 PST के रूप में संग्रहीत किया, डेटासोर्स 2 ने इसे 2014-10-19 18:23:54 UTC के रूप में संग्रहीत किया। वे timestamptz डेटाप्रकार में जमा हो जाती है, तो यह आप एक ही समय में दिखाई देगा जब आप

SELECT datasource1.time, datasource2.time 
संबंधित मुद्दे