รูปแบบการประทับเวลาที่ดีที่สุดสำหรับ CSV / Excel?


110

ฉันกำลังเขียนไฟล์ CSV ฉันต้องเขียนการประทับเวลาที่แม่นยำอย่างน้อยถึงวินาทีและควรเขียนเป็นมิลลิวินาที รูปแบบใดที่ดีที่สุดสำหรับการประทับเวลาในไฟล์ CSV เพื่อให้ Excel แยกวิเคราะห์ได้อย่างแม่นยำและไม่น่าสงสัยโดยมีการแทรกแซงของผู้ใช้เพียงเล็กน้อย


คุณใช้ภาษาอะไรในการสร้างผลลัพธ์
Peter Perháč

คำตอบ:


104

เพื่อความแม่นยำที่สอง yyyy-MM-dd HH: mm: ss ควรทำเคล็ดลับ

ฉันเชื่อว่า Excel ไม่ค่อยดีนักกับเศษส่วนของวินาที (สูญเสียพวกมันเมื่อโต้ตอบกับ COM object IIRC)


ใช่ - ฉันเห็นด้วยกับคุณและเฟรดริก หากคุณสามารถขุดข้อมูลอ้างอิงเหล่านั้นได้ฉันจะขอบคุณอย่างแน่นอน ขอบคุณ!

18
สำหรับใครก็ตามที่ใช้ Ruby strftimeสตริงอาร์กิวเมนต์ที่เทียบเท่าคือ"%Y-%m-%d %H:%M:%S"
Greg Matthew Crossley

2
@nickf - .CSVเป็นเพียงไฟล์ข้อความ คุณสามารถแสดงเขตเวลาหรือสิ่งอื่นใดที่คุณเขียนลงในไฟล์เป็นข้อความธรรมดาที่คั่นด้วยเครื่องหมายจุลภาค สิ่งที่สำคัญคือสิ่งที่แอพลิเคชันจะอ่านมันและวิธีที่โปรแกรมคาดหวังว่าข้อความ นี่คือเอกสารสำหรับมาตรฐาน CSV จากหอสมุดแห่งชาติ ไม่มีวิธีที่กำหนดในการจัดเก็บวันที่โดยเฉพาะ รวมถึงRFC-4180และCSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)
ashleedawg

C # / ไฟล์ IronPython.GetLastWriteTimeUtc ("your-path-here") ToString ("yyyy-% m-% d% H:% MM:% ss")
Konrads

ใน python ที่มี strftime () รูปแบบจะเป็น"%Y-%m-%d %H:%M:%S"เช่นเดียวกันกับ Ruby
rcronk

18

คำแนะนำก่อนหน้านี้ในการใช้ "yyyy-MM-dd HH: mm: ss" นั้นใช้ได้แม้ว่าฉันจะเชื่อว่า Excel มีความละเอียดเวลาที่ละเอียดกว่านั้นมาก ฉันคิดว่าโพสต์นี้ค่อนข้างน่าเชื่อถือ (ตามหัวข้อแล้วคุณจะเห็นการคำนวณทางคณิตศาสตร์และการทดลองกับ Excel) และถ้าถูกต้องคุณจะมีเวลาเป็นมิลลิวินาที คุณสามารถใส่จุดทศนิยมต่อท้ายเช่น "yyyy-mm-dd hh: mm: ss.000"

คุณควรทราบว่า Excel อาจไม่จำเป็นต้องจัดรูปแบบข้อมูล (โดยไม่มีการแทรกแซงของมนุษย์) ในลักษณะที่คุณจะเห็นความแม่นยำทั้งหมดนั้น ในคอมพิวเตอร์ของฉันในที่ทำงานเมื่อฉันตั้งค่า CSV ด้วยข้อมูล "yyyy-mm-dd hh: mm: ss.000" (ด้วยมือโดยใช้ Notepad) ฉันจะได้ "mm: ss.0" ในเซลล์และ "m / d / yyyy hh: mm: ss AM / PM "ในแถบสูตร

เพื่อให้ได้ข้อมูลสูงสุด [1] ที่ถ่ายทอดในเซลล์โดยไม่มีการแทรกแซงของมนุษย์คุณอาจต้องการแยกการประทับเวลาของคุณออกเป็นส่วนวันที่และส่วนของเวลาโดยให้ส่วนเวลาเป็นส่วนที่สองเท่านั้น สำหรับฉันดูเหมือนว่า Excel ต้องการให้ "ระดับ" ที่มองเห็นได้มากที่สุดสามระดับ (โดยเศษส่วนของวินาทีเป็นระดับของมันเอง) ในเซลล์ใด ๆ และคุณต้องการเจ็ด: ปีเดือนวันชั่วโมงนาทีวินาที และเศษส่วนของวินาที

หรือหากคุณไม่ต้องการให้การประทับเวลาเป็นสิ่งที่มนุษย์สามารถอ่านได้ แต่คุณต้องการให้มีความแม่นยำมากที่สุดคุณอาจต้องการเพียงแค่จัดเก็บตัวเลขจำนวนมาก (ภายใน Excel ใช้เพียงจำนวนวันรวมถึงวันเศษส่วน ตั้งแต่วันที่ "ยุค")


[1] นั่นคือข้อมูลตัวเลข หากคุณต้องการดูข้อมูลให้มากที่สุด แต่ไม่สนใจเกี่ยวกับการคำนวณด้วยคุณสามารถสร้างรูปแบบบางอย่างซึ่ง Excel จะแยกวิเคราะห์เป็นสตริงและปล่อยให้อยู่คนเดียว เช่น "yyyymmdd.hhmmss.000"


14

รูปแบบ "yyyy-MM-dd hh: mm: ss.000" ใช้ไม่ได้ในทุกภาษา สำหรับบางคน (อย่างน้อยเดนมาร์ก) "yyyy-MM-dd hh: mm: ss, 000" จะทำงานได้ดีกว่า


2
Strangely Excel 2010 ตรวจไม่พบวันที่เมื่อส่วนมิลลิวินาทีเป็น 000 ส่วนอื่น ๆ จะทำ
Dio F

4

ฉันเชื่อว่าถ้าคุณใช้doubleชนิดข้อมูลการคำนวณซ้ำใน Excel จะใช้ได้ดี


ฉันเพิ่งลองและมันได้ผลดีจริงๆ เพียงแค่ต้องบอก Excell ว่ารูปแบบของคอลัมน์นั้นคือ Date / Time จะไม่ตรวจพบสิ่งนี้โดยอัตโนมัติจาก CSV เนื่องจากไม่ได้อธิบายข้อมูลอย่างชัดเจน
Peter Perháč

3

ไปที่การตั้งค่าภาษาในแผงควบคุมจากนั้นเลือกรูปแบบเลือกภาษาและดูรูปแบบวันที่จริงสำหรับภาษาที่ Windows เลือกใช้โดยค่าเริ่มต้น ใช่รูปแบบการประทับเวลานั้นคำนึงถึงสถานที่ Excel ใช้รูปแบบเหล่านั้นเมื่อแยกวิเคราะห์ CSV

ยิ่งไปกว่านั้นหากภาษานั้นใช้อักขระที่อยู่นอกเหนือจาก ASCII คุณจะต้องปล่อย CSV ในโค้ดเพจ "ANSI" ของ Windows ก่อน Unicode ที่เกี่ยวข้องเช่น CP1251 Excel จะไม่ยอมรับ UTF-8


1

สำหรับเขตเวลา ฉันต้องจัดเก็บค่าออฟเซ็ต UTC เป็นวินาทีจาก UTC ด้วยวิธีนี้สูตรใน Excel / OpenOffice สามารถแปลเวลาข้อมูลได้ในที่สุด ฉันพบว่าสิ่งนี้ง่ายกว่าการจัดเก็บตัวเลขใด ๆ ที่มี 0 อยู่ข้างหน้า -0900 ไม่สามารถแยกวิเคราะห์ได้ดีในระบบสเปรดชีตใด ๆ และการนำเข้าแทบจะเป็นไปไม่ได้เลยที่จะฝึกให้ผู้คนทำ


1

รูปแบบ "yyyy-mm-dd hh: mm: ss.000" ใช้ไม่ได้ในทุกภาษา สำหรับบางคน (อย่างน้อยเดนมาร์ก) "yyyy-mm-dd hh: mm: ss, 000" จะทำงานได้ดีกว่า

ตามที่ตอบกลับโดย user662894

ฉันต้องการเพิ่ม: อย่าพยายามรับไมโครวินาทีจากกล่าวว่าประเภทข้อมูล datetime2 ของ SQL Server: Excel ไม่สามารถจัดการเศษส่วนได้มากกว่า 3 วินาที (เช่นมิลลิวินาที)

ดังนั้น "YYYY-MM-DD HH: mm: ss.000000" จะไม่ทำงานและเมื่อ Excel เป็นอาหารชนิดของสายนี้ (จากไฟล์ CSV) ก็จะดำเนินการปัดเศษมากกว่าการตัด

สิ่งนี้อาจใช้ได้ยกเว้นเมื่อความแม่นยำระดับไมโครวินาทีมีความสำคัญซึ่งในกรณีนี้คุณจะดีกว่าโดยการไม่เรียกใช้การรับรู้ประเภทข้อมูลอัตโนมัติ แต่ให้สตริงเป็นสตริง ...


0

ฉันเดาว่ารูปแบบ ISOเป็นความคิดที่ดี ( บทความ Wikipediaพร้อมข้อมูลเวลาด้วย)


1
(downvote; อันที่จริงไม่ excel ไม่รู้จักรูปแบบนั้น)
Doug

1
@ Doug ฉันเพิ่งทำการทดสอบเพื่อตรวจสอบว่าทำงานได้ดีใน Office 2010 ฉบับภาษาอังกฤษลองใช้ทั้งการตั้งค่าในเครื่องของฉัน (ภาษาสวีเดนซึ่งใช้รูปแบบ ISO สำหรับวันที่และภาษาอังกฤษแบบสหรัฐอเมริกา) ไม่อยู่ในความสนใจ: คุณไม่ได้อยู่ในสภาพแวดล้อมใด ฉันไม่แปลกใจเลยที่มันใช้ได้กับบางคนและล้มเหลวสำหรับบางคน: Excel ไม่ใช่เรื่องน่าแปลกใจที่ประสบการณ์ของฉันคงเส้นคงวา ...
Fredrik Mörk

1
แน่นอนว่ามันไม่ทำงานใน office 2012 สำหรับ OSX รูปแบบ 'เนทีฟ' รูปแบบเดียวที่จะรับรู้ในการทดสอบของฉันคือ MM / DD / YYYY HH: MM: SS; อย่างอื่นก็ถือว่าเป็นข้อความ
Doug

1
ฉันพบคำถามนี้หลังจากพบว่า Excel ไม่รู้จักวันที่ของรูปแบบ ISO ใน CSV IMO นั่นคือบั๊กใน Excel
billpg

2
นั่นอาจจะเป็น @Patrick นั่นเป็นเรื่องยากที่จะทดสอบย้อนกลับไปในปี 2009 ;-)
Fredrik Mörk

0

ลอง MM / dd / yyyy hh: mm: ss a format

โค้ด Java เพื่อสร้างไฟล์ XML

xmlResponse.append ("mydate>") ผนวก (this.formatDate (resultSet.getTimestamp ("date"), "MM / dd / yyyy hh: mm: ss a")) ผนวก ("");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}

0

ดังนั้น excel แปลก ๆ นำเข้าวันที่ csv ด้วยวิธีต่างๆ และแสดงแตกต่างกันไปตามรูปแบบที่ใช้ในไฟล์ csv น่าเสียดายที่รูปแบบ ISO 8061 อยู่ในรูปแบบสตริง ซึ่งทำให้คุณไม่สามารถฟอร์แมตวันที่ใหม่ได้

สิ่งที่ต้องทำทั้งหมดเป็นวันที่ ... มีข้อมูลทั้งหมด ... แต่มีรูปแบบแตกต่างกัน ... หากคุณไม่ชอบคุณสามารถเลือกรูปแบบใหม่สำหรับคอลัมน์ใน excel และจะใช้งานได้ (หมายเหตุ: คุณสามารถบอกได้ว่ามันเข้ามาเป็นวันที่ / เวลาที่ถูกต้องเพราะมันจะถูกต้อง ... ถ้ามันมาเป็นสตริงมันจะจัดชิดซ้าย)

นี่คือรูปแบบที่ฉันทดสอบ:

"yyyy-MM-dd" แสดงเป็นวันที่แน่นอนเมื่อเปิดใน excel (เช่นกัน "MM / dd / yyyy")

"yyyy-MM-dd HH: mm: ss" รูปแบบการแสดงเริ่มต้นคือ "MM / dd / yyyy HH: mm" (วันที่และเวลาโดยไม่ใช้วินาที)

"yyyy-MM-dd HH: mm: ss.fff" รูปแบบการแสดงเริ่มต้นคือ "HH: mm: ss" (เฉพาะเวลา w / วินาที)


-1

ให้ไฟล์ csv ที่มีคอลัมน์วันที่และเวลาในรูปแบบนี้: yyyy-mm-dd hh: mm: ss

Excel แสดงในรูปแบบนี้: dd / mm / yyyy hh: mm

เช่น 2020-05-22 16:40:55 แสดงเป็น 22/05/2020 16:40 น

เห็นได้ชัดว่ากำหนดโดยรูปแบบวันที่สั้นและเวลาสั้นที่เลือกใน Windows ตัวอย่างเช่นถ้าฉันเปลี่ยนรูปแบบ Short date ใน Windows เป็น yyyy-mm-dd Excel จะแสดงวันที่ 2020-05-22 16:40 น.

น่ารำคาญฉันไม่พบวิธีใดที่จะทำให้ Excel แสดงวินาทีโดยอัตโนมัติ (ฉันต้องจัดรูปแบบคอลัมน์ใน Excel ด้วยตนเอง) แต่ถ้าไฟล์ csv มีคอลัมน์เวลาในรูปแบบ hh: mm: ss (เช่น 16:40:55) นั่นคือสิ่งที่แสดงใน Excel รวมถึงวินาทีด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.