Dosya adı veya uzantı içinde kullanılabilen DateTime.ToString () biçimi?


102

Dosyalar oluşturulurken dosya adlarına bir zaman damgası eklemek istiyorum, ancak denediğim DateTime yöntemlerinin çoğu boşluklar ve eğik çizgilerle çıktılar. Örneğin:

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()çalışır ancak tam olarak insan tarafından okunabilir değildir. Çıktıyı, bir dosya adı veya uzantı içinde kullanılabilen tarih ve saat ile insan tarafından okunabilir bir zaman damgasına nasıl biçimlendirebilirim? Tercihen böyle bir şey 2011-19-9--13-45-30?


2
Buna ne dersin ... DateTime.Now.ToString ("yyyy-MM-dd - hh-mm-ss")
Gene S

Yanıtlar:


180

Bunu kullanabilirsiniz:

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

5
Burada daha fazla örneğe / seçeneğe göz atabilirsiniz
Kristof Claes

1
Sanırım utc zamanını düşünmek daha iyi olurdu
RealSteel 07

93
Günün yıl ile ay arasında olmasını mı öneriyorsun?
kjbartel

11
Bir dosya adında daha da mazur görülemez, çünkü dosya listesi onları tarih saat sırasına göre almak için ada göre sıralanamaz. En önemliden en az önemli olana, günün sırası olmalıdır.
Bernhard Hofmann

4
@Matt - dosya adının her zaman olmadığı gibi oluşturulan / değiştirilen / erişilen tarihle ilişkili olduğunu varsayarsınız.
Bernhard Hofmann

122

Ayırıcılar olmadan ISO 8601 biçimini kullanırdım :

DateTime.Now.ToString("yyyyMMddTHHmmss")

7
Kullanırsanız, size DateTime.Now.ToString("o")verecektir yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(burada son saat ve dakika farkı +/- GMT'dir). Verilmiş, bu bir dosya adı formatı olarak çalışmaz, ancak "o"biçimlendirmeyi bilmek iyidir.
krillgar

17

Benzer bir durumum var, ancak DateTime.Parse'ı dosya adından da kullanabilmek için tutarlı bir yol istiyorum, bu yüzden gittim

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

Ayrıştırmak istediğimde Değiştir çağrısını basitçe tersine çevirebilirim. Bu şekilde herhangi bir yymmdd şeyi yazmam veya DateTime.Parse'ın hangi formatlara izin verdiğini tahmin etmem gerekmiyor.


9

En sık kullanılan saat biçimi belirleyicilerinin aşağıdaki listesi.,

gg -01'den 31'e kadar ayın günü .

MM -01'den 12'ye kadar ay .

yyyy -dört basamaklı bir sayı olarak yıl .

hh - saat ,01'den 12'ye 12 saatlik bir zamankullanır.

mm - dakika , 00'dan 59'a kadar.

ss - saniye , 00'dan 59'a kadar.

HH - saat ,00 ile 23 arasında 24 saatlik bir saatkullanır.

tt - AM / PM belirteci.

Yukarıdakileri kullanarak dosya adınız için benzersiz bir ad oluşturabilirsiniz.

Burada örnek verdim

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

VEYA

Sembol kullanmayı tercih etmiyorsanız, bunu da deneyebilirsiniz.

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

Umarım bu şimdi veya gelecekte birine yardımcı olur. :)


7

Şahsen ben bu şekilde seviyorum:

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

Çünkü tarih ile saati birbirinden ayırır.


2
Sanırım "yyyy-MM-gg HH.mm.ss" demek istediniz
Filimindji

Bu geçerli olsa da, dosya adlarında / yollarında boşluklar bulundurmak genellikle en iyisi değildir, çünkü yazılımda bunu hesaba katmayan problemlere ve komut satırında tırnak içermeyen yollara yol açabilir. Alt çizgi veya iki çizgi olması daha iyi bir uygulamadır.
Nuh Heber


3

Kullanılması enterpolasyon dizesini & Biçim belirteci :

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

Veya Amerika'da değilseniz:

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

Bu özellik, C # 6 ve dilin sonraki sürümlerinde mevcuttur.


2

Dosyanız için aşağıdaki gibi bir yol oluşturabilirsiniz:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.