การแสดงวันที่ของ Windows


0

ฉันกำลังถกเถียงเกี่ยวกับข้อผิดพลาด 2038 ในยูนิกซ์กับเพื่อน ( ข้อผิดพลาดการประทับเวลา 32 บิต )

เราสงสัยจริงๆว่า windows เก็บวันที่อย่างไร ฉันคิดว่ามันเป็น DateTime ที่เรียบง่าย แต่ระบบจะสามารถคำนวณเดลต้าระหว่างสองวันได้อย่างไร

เป็นไปได้ไหมว่า windows จัดเก็บข้อมูล (ภายใน) ในเวลาประทับจากนั้นแปลงเป็น DateTime หรือไม่?

คำตอบ:


4

มี FILETIME ซึ่งเป็น int 64 บิตที่ลงนามซึ่งแทนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 1 มกราคม 1601 นี่เป็นเวลาที่ยาวนานอย่างน่าขันเนื่องจาก 64 บิตเป็นจำนวนมาก

ในขณะที่ CTIME (Unixtime) เป็น int 32 บิตที่ได้รับการลงนามคิดเป็นวินาทีตั้งแต่วันที่ 1 มกราคม 1970

คำถามที่ดีกว่าคือ "WHERE" Windows ใช้แต่ละรูปแบบหรือไม่ ทุกสิ่งที่เก็บเวลาอาจใช้การแทนเวลาที่พวกเขาต้องการได้เช่นกัน

โฆษณาใช้แบบเดียวกันกับระบบเป็นระบบไฟล์หรือไม่? มีความสนใจในคำตอบของคนนั้น!


เท่าที่ฉันรู้อย่างน้อย. NET Framework จะเลือกเวลาจากไฟล์
Fredrik Mörk

ดังนั้นมันจะถูกเก็บไว้เป็น 1234567890 ถ้าฉันเข้าใจถูกต้องเหรอ?
Erick

@Erick: ดูเหมือนว่า CTIME ไม่ใช่ FILETIME FILETIME เป็นตัวเลขที่บ้า ตอนนี้คือ: 1247703464 ใน CTIME และ FILETIME สำหรับตอนนี้คือ: 1289217709140600000
geoffc

Windows มีวิธีจัดเก็บเวลาอย่างน้อยสองหรือสามวิธี FILETIME เป็นไฟล์ที่ใช้โดย NTFS folks แล้วก็มี OLEDateTime ซึ่งก็คือ double โดยที่ส่วนสำคัญคือวันและส่วนที่เป็นเศษส่วนของเวลาของวันและที่อื่น (จำชื่อไม่ได้ในขณะนี้) สตริงอักขระที่มนุษย์อ่านได้เก็บวันที่เวลาและเขตเวลา
Joey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.