Định dạng DateTime.ToString () có thể được sử dụng trong tên tệp hoặc phần mở rộng?


100

Tôi muốn thêm dấu thời gian vào tên tệp khi tệp được tạo nhưng hầu hết các phương pháp DateTime mà tôi đã thử xuất ra thứ gì đó có dấu cách và dấu gạch chéo. Ví dụ:

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()hoạt động nhưng không chính xác con người có thể đọc được. Làm cách nào để định dạng kết quả đầu ra thành dấu thời gian có thể đọc được với ngày và giờ có thể được sử dụng trong tên tệp hoặc phần mở rộng? Thích một cái gì đó như thế 2011-19-9--13-45-30nào?


2
Còn điều này thì sao ... DateTime.Now.ToString ("yyyy-MM-dd - hh-mm-ss")
Gene S

Câu trả lời:


177

Bạn có thể sử dụng cái này:

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

5
Bạn có thể xem thêm các ví dụ / tùy chọn tại đây: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes

1
Tôi đoán xem xét thời gian utc sẽ tốt hơn
Tay Đấm Thép

89
Bạn có nghiêm túc đề nghị có ngày giữa năm và tháng ??
kjbartel

10
Thậm chí không thể thay đổi được trong tên tệp vì danh sách tệp không thể được sắp xếp theo tên để sắp xếp chúng theo thứ tự ngày giờ. Quan trọng nhất đến quan trọng nhất phải là thứ tự trong ngày.
Bernhard Hofmann

4
@Matt - bạn giả sử rằng tên tệp có liên quan đến ngày được tạo / sửa đổi / truy cập mà nó không phải lúc nào cũng vậy.
Bernhard Hofmann

121

Tôi sẽ sử dụng định dạng ISO 8601 , không có dấu phân cách:

DateTime.Now.ToString("yyyyMMddTHHmmss")

7
Nếu bạn sử dụng DateTime.Now.ToString("o"), nó sẽ cung cấp cho bạn yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(nơi bù giờ và phút cuối cùng là +/- GMT). Được, điều này sẽ không hoạt động như một định dạng tên tệp, nhưng "o"định dạng này là tốt để biết.
krillgar

16

Tôi gặp trường hợp tương tự nhưng tôi muốn có một cách nhất quán để có thể sử dụng DateTime.Parse từ tên tệp, vì vậy tôi đã sử dụng

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

Khi tôi muốn phân tích cú pháp, tôi chỉ cần đảo ngược lệnh gọi Replace. Bằng cách này, tôi không phải nhập bất kỳ nội dung yymmdd nào hoặc đoán những định dạng DateTime.Parse cho phép.


8

Dưới đây là danh sách các từ định dạng thời gian được sử dụng phổ biến nhất.,

đ - ngày trong tháng, từ ngày 01 đến ngày 31.

MM - tháng , từ 01 đến 12.

yyyy - năm dưới dạng số có bốn chữ số.

hh - giờ , sử dụngđồng hồ 12 giờ từ 01 đến 12.

mm - phút , từ 00 đến 59.

ss - thứ hai , từ 00 đến 59.

HH - giờ , sử dụngđồng hồ 24 giờ từ 00 đến 23.

tt - Bộchỉ định AM / PM .

Sử dụng phần trên, bạn sẽ có thể tạo một tên duy nhất cho tên tệp của mình.

Ở đây tôi đã cung cấp ví dụ

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

HOẶC LÀ

Nếu bạn không thích sử dụng các biểu tượng, bạn cũng có thể thử điều này.,

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

Hy vọng điều này sẽ giúp ích cho ai đó bây giờ hoặc trong tương lai. :)


7

Cá nhân tôi thích nó theo cách này:

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

Bởi vì nó phân biệt giữa ngày và giờ.


1
Tôi đoán ý bạn là "yyyy-MM-dd HH.mm.ss"
Filimindji.

3

Bạn có thể thử với

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");

3

Sử dụng chuỗi nội suy và mã định dạng :

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

Hoặc nếu bạn không ở Mỹ:

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

Tính năng này có sẵn trong ngôn ngữ C # 6 và các phiên bản mới hơn.


2

Bạn có thể tạo đường dẫn cho tệp của mình như sau:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.