DateTime ToString () รูปแบบที่สามารถใช้ในชื่อไฟล์หรือนามสกุล?


103

ฉันต้องการเพิ่มการประทับเวลาลงในชื่อไฟล์เมื่อไฟล์ถูกสร้างขึ้น แต่วิธีการ DateTime ส่วนใหญ่ฉันได้ลองใช้ช่องว่างและเครื่องหมายทับ ตัวอย่างเช่น:

Debug.WriteLine(DateTime.Now.ToString()); // <-- 9/19/2012 1:41:46 PM
Debug.WriteLine(DateTime.Now.ToShortTimeString()); // <-- 1:41 PM
Debug.WriteLine(DateTime.Now.ToShortDateString()); // <-- 9/19/2012
Debug.WriteLine(DateTime.Now.ToFileTime()); // <-- 129925501061462806

ToFileTime()ใช้งานได้ แต่ไม่สามารถอ่านได้อย่างแน่นอน ฉันจะจัดรูปแบบผลลัพธ์เป็นเวลาประทับที่มนุษย์อ่านได้พร้อมวันที่และเวลาที่สามารถใช้ในชื่อไฟล์หรือนามสกุลได้อย่างไร ชอบ2011-19-9--13-45-30อะไร


3
แล้วนี่ล่ะ ... DateTime.Now ToString ("yyyy-MM-dd - hh-mm-ss")
Gene S

คำตอบ:


184

คุณสามารถใช้สิ่งนี้:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");

5
คุณสามารถดูตัวอย่าง / ตัวเลือกเพิ่มเติมได้ที่นี่: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes

1
ฉันเดาว่าการพิจารณาเวลา
utc

97
คุณแนะนำให้มีวันระหว่างปีและเดือนอย่างจริงจังหรือไม่?
kjbartel

12
ยิ่งแก้ไม่ได้ในชื่อไฟล์เนื่องจากไม่สามารถจัดเรียงรายการไฟล์ตามชื่อเพื่อให้ได้ตามลำดับวันที่ มีนัยสำคัญมากที่สุดถึงมีนัยสำคัญน้อยที่สุดควรเป็นลำดับของวัน
Bernhard Hofmann

4
@Matt - คุณถือว่าชื่อไฟล์เกี่ยวข้องกับวันที่สร้าง / แก้ไข / เข้าถึงซึ่งไม่ได้เป็นเช่นนั้นเสมอไป
Bernhard Hofmann

124

ฉันจะใช้รูปแบบISO 8601โดยไม่มีตัวคั่น:

DateTime.Now.ToString("yyyyMMddTHHmmss")

7
หากคุณใช้DateTime.Now.ToString("o")มันจะให้คุณyyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(โดยที่ค่าชดเชยชั่วโมงและนาทีสุดท้ายคือ +/- GMT) จริงอยู่สิ่งนี้ใช้ไม่ได้เป็นรูปแบบชื่อไฟล์ แต่การ"o"จัดรูปแบบเป็นสิ่งที่ควรทราบ
krillgar

1
นอกจากนี้ยังสามารถเขียน$"{DateTime.Now:yyyyMMddTHHmmss}"โดยใช้การแก้ไขสตริง
Corbie

17

ฉันมีสถานการณ์ที่คล้ายกัน แต่ฉันต้องการวิธีที่สอดคล้องกันเพื่อให้สามารถใช้ DateTime ได้แยกวิเคราะห์จากชื่อไฟล์ด้วยดังนั้นฉันจึงไปด้วย

DateTime.Now.ToString("s").Replace(":", ".") // <-- 2016-10-25T16.50.35

เมื่อฉันต้องการแยกวิเคราะห์ฉันสามารถย้อนกลับการโทรแทนที่ได้ ด้วยวิธีนี้ฉันไม่ต้องพิมพ์เนื้อหา yymmdd ใด ๆ หรือเดาว่ารูปแบบ DateTime.Parse อนุญาต


9

รายการด้านล่างของตัวระบุรูปแบบเวลาที่ใช้กันมากที่สุด,

dd -วันของเดือนตั้งแต่วันที่ 01 ถึง 31

MM -เดือนตั้งแต่ 01 ถึง 12

ปปปป -ปีเป็นตัวเลขสี่หลัก

HH -ชั่วโมงโดยใช้แบบ 12 ชั่วโมงนาฬิกา 01-12

มม -นาทีตั้งแต่ 00 ถึง 59

ss -วินาทีตั้งแต่ 00 ถึง 59

HH -ชั่วโมงโดยใช้นาฬิกา 24 ชั่วโมงตั้งแต่ 00 ถึง 23 น.

tt - ตัวกำหนด AM / PM

เมื่อใช้ข้างต้นคุณจะสามารถสร้างชื่อเฉพาะให้กับชื่อไฟล์ของคุณได้

ที่นี่ฉันได้ให้ตัวอย่าง

string fileName = "fileName_" + DateTime.Now.ToString("MM-dd-yyyy_hh-mm-ss-tt") + ".pdf";

หรือ

หากคุณไม่ต้องการใช้สัญลักษณ์คุณสามารถลองใช้สิ่งนี้ได้เช่นกัน

string fileName = "fileName_" + DateTime.Now.ToString("MMddyyyyhhmmsstt") + ".pdf";

หวังว่านี่จะช่วยใครบางคนในตอนนี้หรือในอนาคต :)


ฉันต้องการใช้การแก้ไขสตริง:var fileName = $"fileName_{DateTime.Now:MMddyyyyhhmmsstt}.pdf";
Corbie

7

โดยส่วนตัวแล้วฉันชอบวิธีนี้:

DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss")

เพราะมันแยกระหว่างวันที่และเวลา


2
ฉันเดาว่าคุณหมายถึง "yyyy-MM-dd HH.mm.ss"
Filimindji

1
แม้ว่าจะถูกต้อง แต่การมีช่องว่างในชื่อไฟล์ / เส้นทางโดยทั่วไปจะไม่ดีที่สุดเนื่องจากอาจทำให้เกิดปัญหาในซอฟต์แวร์ที่ไม่ได้คำนึงถึงสิ่งนั้นและเส้นทางในบรรทัดคำสั่งที่ไม่มีเครื่องหมายคำพูด การมีขีดล่างหรือสองขีดเป็นการปฏิบัติที่ดีกว่า
Noah Heber


4

การใช้สตริงการแก้ไขและตัวระบุรูปแบบ :

var filename = $"{DateTime.Now:yyyy.dd.M HH-mm-ss}"

ตัวอย่างผลลัพธ์ของวันที่ 1 มกราคม 2020 เวลา 10:40:45 น.:

2020.01.28 10-40-45


หรือหากคุณไม่ได้อยู่ในอเมริกา:

var filename = $"{DateTime.Now:yyyy.M.dd HH-mm-ss}"

หมายเหตุ: คุณลักษณะนี้พร้อมใช้งานในภาษา C # 6 และเวอร์ชันที่ใหม่กว่า


2

คุณสามารถสร้างเส้นทางสำหรับไฟล์ของคุณดังต่อไปนี้:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.