รูปแบบวันที่และเวลาที่คุณชื่นชอบในชื่อไฟล์คืออะไร? [ปิด]


90

นี่เป็นคำถามที่ค่อนข้างเป็นส่วนตัวและไม่สำคัญมากนักในโครงการใหญ่ ๆ แต่เป็นสิ่งที่ทำให้ฉันรำคาญเป็นประจำ ดูเหมือนว่าจะไม่มีวิธีที่ชัดเจนในตัวเองที่จะนำการประทับเวลาในชื่อไฟล์

ปัญหาวัตถุประสงค์คือการประทับเวลาในชื่อไฟล์ควรจัดเรียงได้ แต่รูปแบบวันที่ที่จัดเรียงได้ของ. NET เช่น"s" ( "yyyy-MM-ddTHH:mm:ss") และ"u" ( "yyyy-MM-dd HH:mm:ssZ") ไม่ถูกต้องในชื่อไฟล์เนื่องจากอักขระ ":"

สิ่งอื่นคือคุณควรดูว่ามีการใช้เวลาสากลหรือเวลาท้องถิ่น ในทางปฏิบัติดูเหมือนว่าผู้ใช้จะชอบเวลาท้องถิ่นมากกว่าเวลาสากล

ฉันได้ใช้ISO 8601เป็นส่วนใหญ่ด้วยรูปแบบเวลาพื้นฐาน:

  • สตริงรูปแบบเวลาท้องถิ่น "yyyy-MM-ddTHHmmsszz"
  • สตริงรูปแบบ UTC "yyyy-MM-ddTHHmmssZ"

ในรูปแบบเหล่านี้เวลาท้องถิ่นปัจจุบันของฉันจะเป็น"2009-08-08T151800+03"และ UTC"2009-08-08T121800Z"

คุณยังสามารถตรวจจับ DateTime.Kind โดยอัตโนมัติด้วย"K"และใช้"yyyy-MM-ddTHHmmssK"แต่คุณจะต้องแทนที่อักขระ ":"

ข้อเสนอแนะอื่น ๆ ?

แก้ไข:บันทึกบางส่วนจนถึงตอนนี้:

เวลาท้องถิ่น + รูปแบบเขตเวลา"yyyy-MM-ddTHHmmsszz"จะไม่สามารถจัดเรียงได้อีกต่อไปหากเกี่ยวข้องกับเขตเวลาหลายเขต ในกรณีส่วนใหญ่ควรปล่อยข้อมูลเขตเวลาหากซ้ำซ้อนและใช้ UTC เป็นอย่างอื่น

อีกประการหนึ่งคือ UTC ควรมีเครื่องหมาย 'Z', 'GMT' หรือ 'UTC' เสมอเพื่อป้องกันการคาดเดาและความผิดพลาด

วันที่ของจูเลียนและดาราคนอื่น ๆนั้นยอดเยี่ยมเพราะการคำนวณวันที่ด้วยปฏิทินเกรกอเรียนเป็นแบบ Braindead


2
ผมเห็นด้วยกับทั้งหมดนี้ยกเว้นว่าผมไม่พบว่ามันมีความสำคัญในโครงการขนาดใหญ่ของสิ่งที่ รูปแบบของคุณดีที่สุด - ฉันจะใช้เขตเวลา 4 หลักตามที่ระบุใน ISO8601 เพื่อรองรับโซนที่ไม่ใช่จำนวนเต็ม มันทำให้ฉันรำคาญอยู่เสมอว่า ISO8601 ไม่ได้ระบุจุดโคลอนต้องห้ามในชื่อไฟล์
hpekristiansen

ฉันเสนอรูปแบบตาม ISO 8601 ในโพสต์ที่blog.xam.de/2016/07/… - จะทำให้โลกของเราง่ายขึ้นถ้าเราเห็นด้วยกับรูปแบบ :-)
Dr. Max Völkel

"ปิดไม่สร้างสรรค์" ?? มีเหตุผลสำหรับและต่อต้านทุกข้อเสนอดังนั้นจึงเป็นเรื่องที่สร้างสรรค์ ไม่ต้องเขินอายจากคำถามเกี่ยวกับรายละเอียดทางปรัชญาของการตั้งชื่อไฟล์: D
tanius

คำตอบ:


58

ฉันใช้สิ่งนี้:

My-File--2009-12-31--23-59-59.txt
  • ไม่มีช่องว่าง
  • ขีดคู่เพื่อแยกชิ้นส่วนทำให้แต่ละชิ้นมองเห็นได้ง่าย
  • อักขระเครื่องหมายวรรคตอน (เส้นประ) เพียงตัวเดียวทำให้พิมพ์ได้ง่าย
  • ไม่มีเขตเวลาเพราะสำหรับฉันฉันมักจะทำงานในเขตเวลาท้องถิ่นของฉัน ถ้าฉันต้องการฉันจะใช้ UTC และต่อท้าย " --UTC" หลังจากเวลานั้น

5
ฉันทำประมาณเดียวกันแม้ว่าฉันจะเริ่มต้นด้วยการประทับเวลาแล้วตามด้วยไฟล์ 'my-file' เนื่องจากจะช่วยให้สามารถดูไฟล์ตามลำดับเวลาได้โดยสั่งชื่อไฟล์ตามตัวอักษร
ChristopheD

2
@ChristopheD: แน่นอน - ฉันจะทำเช่นเดียวกันในกรณีนั้น สำหรับคำตอบของฉันฉันกำลังนึกถึงกรณีที่คุณมีไฟล์หลายเวอร์ชันหลายเวอร์ชันและคุณต้องการให้จัดกลุ่มตามชื่อไฟล์
RichieHindle

2
โดยส่วนตัวแล้วฉันชอบใช้เครื่องหมายขีดล่าง ( _) แทนเส้นประคู่เพื่อแยกชิ้นส่วน (เช่นMy-File_2009-12-31_23-59-59.txt)
Elie G.

A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extใช้ได้สำหรับ Linux shell ไม่มีเขตเวลา แต่มีความแม่นยำระดับนาโนวินาที
Ivan Black

15

ฉันจะใช้YYYY-MM-DD HHmmssสำหรับชื่อไฟล์เว้นแต่ว่ามีความจำเป็นเป็นพิเศษสำหรับเขตเวลาหรืออาจจำเป็นต้องแยกวิเคราะห์เป็นวันที่ ISO ในกรณีเหล่านี้วันที่ ISO อาจเป็นที่ต้องการ

แก้ไข:เขตเวลาไม่ควรจำเป็นจริงๆ บันทึกทุกอย่างใน UTC และแจ้งให้ผู้คนทราบว่า UTC ทั้งหมดมีประสิทธิภาพมากกว่าการระบุเขตเวลาของทุกสิ่ง


9
อุ๊ยเว้นวรรคในชื่อไฟล์ของคุณ?
Saggi Malachi

10
เว้นวรรคผิดอะไร
Joey

41
ใช่ช่องว่างเป็นเรื่องเลวร้าย ฉันจะติดตามคนที่ใช้ช่องว่างในชื่อไฟล์เป็นการส่วนตัวและเอาชนะพวกเขาให้ตายด้วยคื่นฉ่ายไม้เปียก :-)
paxdiablo

1
@Saggi; ฉันอาจจะสมควรได้รับสิ่งนั้น แต่อย่างจริงจัง - แสดงระบบหนึ่งที่ไม่จัดการชื่อไฟล์ที่มีช่องว่างหรือไม่? จากสิ่งที่ฉันรวบรวมได้ไม่มี URI เกี่ยวข้องดังนั้นฉันจึงไม่ต้องกังวลกับช่องว่างมากเกินไป แน่นอนว่าคุณสามารถแลกเปลี่ยนช่องว่างนั้นกับสิ่งอื่นได้เช่นขีดล่างหรือTแต่จะไม่ค่อยเป็นธรรมชาติเมื่อคุณอ่าน
คุณ

1
ฉันจะโหวตให้อันนี้ (แต่ฉันจะไม่เว้นวรรค) เหตุผลที่เป็นปี 4 หลักซึ่งจะดับปัญหา y2k1 (แต่ไม่ใช่ y10k แต่ใครให้ XXXX เกี่ยวกับเรื่องนั้นจริงๆ)
paxdiablo

9

นี่คือสิ่งที่ฉันใช้:

    private static string CreateMeaningfulFileName(string friendlyName, DateTime date)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces
        {
            sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment
        }
        sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date
        return sb.ToString();
    }

ต้องใช้วันที่และคำอธิบาย มาใช้ "I like DOGS" กันเถอะ ผลลัพธ์ใน:

ILikeDogs_1999-09-23_18-42


1
วิธีที่ดีในการทำลายวันที่และเวลาและ 1 ตัวอักษรน้อยกว่าคำตอบของ @ RichieHindle
Robino

3

มีข้อกำหนดสำหรับการประทับเวลาเพื่อให้มนุษย์สามารถอ่านได้หรือไม่? ถ้าไม่คุณก็สามารถใช้DateTime.Ticks.ToString () ถูกต้องมากเรียงลำดับได้และไม่มีอักขระพิเศษ


1
ฉันมักจะพยายามทำให้ทุกสิ่งที่มนุษย์อ่านได้ถ้าเป็นไปได้ นี่เป็นหนึ่งในคุณค่าที่ยอดเยี่ยมของรูปแบบเช่นสัญกรณ์ JSON แม้ว่าคุณจะไม่คิดว่ามันต้องเป็นสิ่งที่มนุษย์สามารถอ่านได้ แต่คุณไม่มีทางรู้ว่าคุณจะต้องการให้มนุษย์อ่านได้ในภายหลังหรือไม่ นอกจากนี้ยังมีแนวโน้มที่จะทำให้การดีบักง่ายขึ้น
Edan Maor

ลิงค์ไม่ทำงานมันไปที่อะไร?
rbatt

@rbatt ฉันคิดว่ามันเป็นแค่ปัญหา MSDN ชั่วคราว - ควรจะกลับมาแล้ว
Dan Diplo

2

ปกติผมใช้ yyyymmdd หากต้องการความแม่นยำเพิ่มเติมก็จะเปลี่ยนเป็น yyyymmddhhmmss


1

ฉันใช้การประทับเวลาของยูนิกซ์เช่น กี่วินาทีที่ผ่านไปจากยุค เวลาทั้งหมดใน UTC แต่เดาว่าคุณสามารถนำหน้าข้อมูล / เขตเวลาได้หากต้องการ

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