ใช่. TIMESTAMP WITHOUT TIME ZONE
มีกรณีการใช้งานสำหรับการเป็น
- ในแอปทางธุรกิจทั่วไปประเภทนี้จะใช้สำหรับ:
- จองนัดหมายในอนาคต
- เป็นตัวแทนของเวลาเดียวกันของวันในเขตเวลาต่างๆเช่นเที่ยงในวันที่ 23 ในโตเกียวและในปารีส (ช่วงเวลาที่แตกต่างกันสองชั่วโมงชั่วโมงกันในเวลาเดียวกันของวัน)
- สำหรับการติดตามช่วงเวลาเฉพาะจุดบนไทม์ไลน์ที่มักจะใช้ไม่ได้
TIMESTAMP WITH TIME ZONE
WITHOUT
TIMESTAMP WITHOUT TIME ZONE
ค่าไม่ใช่จุดบนไทม์ไลน์ไม่ใช่ช่วงเวลาจริง พวกเขาเป็นตัวแทนความคิดที่หยาบเกี่ยวกับศักยภาพช่วงเวลาที่จุดที่เป็นไปได้ในระยะเวลาตามช่วงประมาณ 26-27 ชั่วโมง (ช่วงของโซนเวลาทั่วโลกบริการ) พวกเขาไม่มีความหมายที่แท้จริงจนกว่าคุณจะใช้เขตเวลาหรือชดเชยจาก UTC
เช่นคริสต์มาส
ตัวอย่างเช่นสมมติว่าคุณต้องบันทึกวันเริ่มต้นของวันหยุด / วันศักดิ์สิทธิ์
Table: holiday_
Column: year_ Type: SMALLINT
Column: description_ Type: VARCHAR
Column: start_ Type: TIMESTAMP WITHOUT TIME ZONE
เพื่อบันทึกความจริงที่ว่าคริสมาสต์เริ่มต้นหลังเที่ยงคืนของวันที่ 25 ธันวาคมปีนี้เราต้องบอกว่า2016-12-25 00:00:00
ไม่มีโซนเวลาใด ๆ ในช่วงต้นของวันซานต้าเขาไปเที่ยวโอ๊คแลนด์นิวซีแลนด์หลังเที่ยงคืนเนื่องจากเป็นหนึ่งในมิด Midnights ที่เก่าแก่ที่สุดในโลก จากนั้นเขาก็เดินทางไปทางตะวันตกเมื่อเที่ยงคืนถัดไปเกิดขึ้นในไม่ช้าก็มาถึงฟิลิปปินส์ จากนั้นกวางเรนเดียร์ก็เดินไปในทิศทางตะวันตกโดยไปถึงอินเดียในเวลาเที่ยงคืนซึ่งเกิดขึ้นหลายชั่วโมงหลังจากเที่ยงคืนโอ๊คแลนด์ ในเวลาต่อมายังคงเป็นเที่ยงคืนใน Paris FR และต่อมาเที่ยงคืนใน Montreal CA การเยี่ยมชมทั้งหมดของซานต้าเกิดขึ้นในช่วงเวลาที่แตกต่างกันคือเวลาแต่เกิดขึ้นไม่นานหลังจากเที่ยงคืนต่อเที่ยงคืนของแต่ละท้องถิ่น
ดังนั้นการบันทึก2016-12-25 00:00:00
โดยไม่มีเขตเวลาใด ๆ เป็นจุดเริ่มต้นของคริสมาสต์เป็นข้อมูลและถูกต้องตามกฎหมาย แต่เพียงราง จนกว่าคุณจะพูดว่า "คริสต์มาสในโอ๊คแลนด์" หรือ "คริสต์มาสในมอนทรีออ" เราไม่มีเวลาที่เฉพาะเจาะจง หากคุณกำลังบันทึกช่วงเวลาที่เกิดขึ้นจริงในแต่ละครั้งที่เลื่อนลงคุณจะใช้TIMESTAMP WITH TIME ZONE
มากกว่าWITHOUT
ประเภท
คล้ายกับคริสต์มาสเป็นวันส่งท้ายปีเก่า เมื่อไทม์สแควบอลลดลงใน New York , คนที่อยู่ในซีแอตเติยังคงหนาวแชมเปญของพวกเขาและการเตรียมความพร้อมของพวกเขาแตรบุคคล แต่เราจะบันทึกความคิดของช่วงเวลาปีใหม่เป็นใน2017-01-01 00:00:00
TIMESTAMP WITHOUT TIME ZONE
ในทางตรงกันข้ามถ้าเราต้องการบันทึกเมื่อลูกบอลตกลงในนิวยอร์กหรือเมื่อผู้คนในซีแอตเทิลเป่าเขาเขาเราจะใช้TIMESTAMP WITH TIME ZONE
(ไม่ใช่WITHOUT
) เพื่อบันทึกช่วงเวลาที่เกิดขึ้นจริงแต่ละสามชั่วโมงนอกเหนือจากที่อื่น
ตัวอย่าง: กะโรงงาน
อีกตัวอย่างหนึ่งอาจบันทึกนโยบายที่เกี่ยวข้องกับเวลานาฬิกาแขวนข้ามสถานที่ต่างๆ สมมติว่าเรามีโรงงานในดีทรอยต์ดึสเซลดอร์ฟและเดลี ถ้าเราบอกว่าที่ทั้งสามโรงงานเปลี่ยนครั้งแรกเริ่มต้นที่ 6:00 กับพักรับประทานอาหารกลางวันเวลา 11:30 AM, TIMESTAMP WITHOUT TIME ZONE
ที่สามารถบันทึกเป็น อีกครั้งข้อมูลนี้มีประโยชน์ในทางที่คลุมเครือ แต่ไม่ได้ระบุช่วงเวลาที่เฉพาะเจาะจงจนกว่าเราจะใช้เขตเวลา รุ่งอรุณวันใหม่เร็วขึ้นในภาคตะวันออก ดังนั้นโรงงานของนิวเดลีจะเป็นแห่งแรกที่เปิดในเวลา 6.00 น. ชั่วโมงต่อมาโรงงานDüsseldorfเริ่มทำงานเวลา 6.00 น. แต่โรงงานดีทรอยต์จะไม่เปิดจนกว่าจะถึงอีกหกชั่วโมงต่อมาเมื่อเวลา 6.00 น. เกิดขึ้น
เปรียบเทียบความคิดนี้ (เมื่อการเปลี่ยนแปลงของโรงงานเริ่มต้น) กับข้อเท็จจริงทางประวัติศาสตร์ของเมื่อใดที่คนงานในโรงงานแต่ละคนทำงานนาฬิกาเข้า - ออกเพื่อเริ่มการเปลี่ยนแปลงในวันใดวันหนึ่ง นาฬิกาเป็นช่วงเวลาที่แท้จริงซึ่งเป็นจุดที่เกิดขึ้นจริงบนเส้นเวลา ดังนั้นเราจะบันทึกลงในคอลัมน์ประเภทTIMESTAMP WITH TIME ZONE
มากกว่าWITHOUT
ประเภท
TIMESTAMP WITHOUT TIME ZONE
ดังนั้นใช่มีถูกต้องตามกฎหมายกรณีการใช้งานสำหรับ แต่จากประสบการณ์ของฉันกับแอพทางธุรกิจพวกมันค่อนข้างหายาก ในธุรกิจเรามักจะสนใจเกี่ยวกับช่วงเวลาที่แท้จริง: ใบแจ้งหนี้มาถึงจริงเมื่อใดเมื่อสัญญาดังกล่าวมีผลบังคับใช้จริง ณ เวลาใดที่ธุรกรรมของธนาคารนั้นดำเนินการ ดังนั้นในสถานการณ์ทั่วไปเราต้องการTIMESTAMP WITH TIME ZONE
พิมพ์
สำหรับการสนทนาเพิ่มเติมให้ดูคำตอบของคำถามที่คล้ายกันฉันควรจัดเก็บเวลาประทับ UTC หรือเวลาท้องถิ่นสำหรับการเปลี่ยนแปลง
Postgres
โปรดทราบว่า Postgres จะไม่บันทึกข้อมูลโซนเวลาที่ระบุไว้โดยเฉพาะเมื่อทำการแทรกการประทับเวลา
TIMESTAMP WITH TIME ZONE
- เขตเวลาใด ๆ ที่ระบุหรือออฟเซ็ตรวมอยู่กับข้อมูลอินพุตจะใช้เพื่อปรับค่าเป็น UTC และเก็บไว้ ข้อมูลโซน / ออฟเซ็ตที่ผ่านไปจะถูกยกเลิก คิดว่าเป็น
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH RESPECT FOR TIME ZONE
- เวลา 12.00 น. ของวันที่ 7 มีนาคมปีนี้ในอินเดียจะมีการปรับเวลาเป็น UTC โดยการลบชั่วโมงห้าชั่วโมงครึ่ง: 6.30 น.
TIMESTAMP WITHOUT TIME ZONE
- เขตเวลาใด ๆ ที่ระบุหรือออฟเซ็ตที่รวมอยู่ในข้อมูลอินพุตจะถูกละเว้นทั้งหมด
- ข้อมูลนำเข้าเวลา 12.00 น. ของวันที่ 7 มีนาคมปีนี้ในประเทศอินเดียบันทึกเป็นเวลา 12:00 น. ของวันที่ 7 มีนาคมของปีนี้โดยไม่มีการปรับเปลี่ยน
มาตรฐาน SQL แทบจะไม่ได้สัมผัสกับปัญหาของชนิดข้อมูลและวันที่และเวลา ดังนั้นฐานข้อมูลจึงแตกต่างกันอย่างมากในการจัดการวันเวลา