ฉันกำลังเขียนไฟล์ CSV ฉันต้องเขียนการประทับเวลาที่แม่นยำอย่างน้อยถึงวินาทีและควรเขียนเป็นมิลลิวินาที รูปแบบใดที่ดีที่สุดสำหรับการประทับเวลาในไฟล์ CSV เพื่อให้ Excel แยกวิเคราะห์ได้อย่างแม่นยำและไม่น่าสงสัยโดยมีการแทรกแซงของผู้ใช้เพียงเล็กน้อย
ฉันกำลังเขียนไฟล์ CSV ฉันต้องเขียนการประทับเวลาที่แม่นยำอย่างน้อยถึงวินาทีและควรเขียนเป็นมิลลิวินาที รูปแบบใดที่ดีที่สุดสำหรับการประทับเวลาในไฟล์ CSV เพื่อให้ Excel แยกวิเคราะห์ได้อย่างแม่นยำและไม่น่าสงสัยโดยมีการแทรกแซงของผู้ใช้เพียงเล็กน้อย
คำตอบ:
เพื่อความแม่นยำที่สอง yyyy-MM-dd HH: mm: ss ควรทำเคล็ดลับ
ฉันเชื่อว่า Excel ไม่ค่อยดีนักกับเศษส่วนของวินาที (สูญเสียพวกมันเมื่อโต้ตอบกับ COM object IIRC)
strftime
สตริงอาร์กิวเมนต์ที่เทียบเท่าคือ"%Y-%m-%d %H:%M:%S"
.CSV
เป็นเพียงไฟล์ข้อความ คุณสามารถแสดงเขตเวลาหรือสิ่งอื่นใดที่คุณเขียนลงในไฟล์เป็นข้อความธรรมดาที่คั่นด้วยเครื่องหมายจุลภาค สิ่งที่สำคัญคือสิ่งที่แอพลิเคชันจะอ่านมันและวิธีที่โปรแกรมคาดหวังว่าข้อความ นี่คือเอกสารสำหรับมาตรฐาน CSV จากหอสมุดแห่งชาติ ไม่มีวิธีที่กำหนดในการจัดเก็บวันที่โดยเฉพาะ รวมถึงRFC-4180และCSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)
"%Y-%m-%d %H:%M:%S"
เช่นเดียวกันกับ Ruby
คำแนะนำก่อนหน้านี้ในการใช้ "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"
รูปแบบ "yyyy-MM-dd hh: mm: ss.000" ใช้ไม่ได้ในทุกภาษา สำหรับบางคน (อย่างน้อยเดนมาร์ก) "yyyy-MM-dd hh: mm: ss, 000" จะทำงานได้ดีกว่า
ฉันเชื่อว่าถ้าคุณใช้double
ชนิดข้อมูลการคำนวณซ้ำใน Excel จะใช้ได้ดี
ไปที่การตั้งค่าภาษาในแผงควบคุมจากนั้นเลือกรูปแบบเลือกภาษาและดูรูปแบบวันที่จริงสำหรับภาษาที่ Windows เลือกใช้โดยค่าเริ่มต้น ใช่รูปแบบการประทับเวลานั้นคำนึงถึงสถานที่ Excel ใช้รูปแบบเหล่านั้นเมื่อแยกวิเคราะห์ CSV
ยิ่งไปกว่านั้นหากภาษานั้นใช้อักขระที่อยู่นอกเหนือจาก ASCII คุณจะต้องปล่อย CSV ในโค้ดเพจ "ANSI" ของ Windows ก่อน Unicode ที่เกี่ยวข้องเช่น CP1251 Excel จะไม่ยอมรับ UTF-8
สำหรับเขตเวลา ฉันต้องจัดเก็บค่าออฟเซ็ต UTC เป็นวินาทีจาก UTC ด้วยวิธีนี้สูตรใน Excel / OpenOffice สามารถแปลเวลาข้อมูลได้ในที่สุด ฉันพบว่าสิ่งนี้ง่ายกว่าการจัดเก็บตัวเลขใด ๆ ที่มี 0 อยู่ข้างหน้า -0900 ไม่สามารถแยกวิเคราะห์ได้ดีในระบบสเปรดชีตใด ๆ และการนำเข้าแทบจะเป็นไปไม่ได้เลยที่จะฝึกให้ผู้คนทำ
รูปแบบ "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) ก็จะดำเนินการปัดเศษมากกว่าการตัด
สิ่งนี้อาจใช้ได้ยกเว้นเมื่อความแม่นยำระดับไมโครวินาทีมีความสำคัญซึ่งในกรณีนี้คุณจะดีกว่าโดยการไม่เรียกใช้การรับรู้ประเภทข้อมูลอัตโนมัติ แต่ให้สตริงเป็นสตริง ...
ฉันเดาว่ารูปแบบ ISOเป็นความคิดที่ดี ( บทความ Wikipediaพร้อมข้อมูลเวลาด้วย)
ลอง 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;
}
ดังนั้น 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 / วินาที)
ให้ไฟล์ 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 รวมถึงวินาทีด้วย