Format DateTime.ToString (), którego można użyć w nazwie pliku lub rozszerzeniu?

100

Chcę dodać sygnaturę czasową do nazw plików podczas tworzenia plików, ale większość metod DateTime, które próbowałem, wyświetla coś ze spacjami i ukośnikami. Na przykład:

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()działa, ale nie jest do końca czytelny dla człowieka. Jak mogę sformatować dane wyjściowe na czytelny dla człowieka znacznik czasu z datą i godziną, których można użyć w nazwie pliku lub rozszerzeniu? Najlepiej coś takiego 2011-19-9--13-45-30?

pdizz
źródło
2
Co powiesz na to ... DateTime.Now.ToString ("rrrr-MM-dd - gg-mm-ss")
Gene S

Odpowiedzi:

177

Możesz użyć tego:

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
Kristof Claes
źródło
5
Więcej przykładów / opcji znajdziesz tutaj: geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm
Kristof Claes
1
Myślę, że rozważenie czasu utc byłoby lepsze
RealSteel
89
Czy naprawdę sugerujesz dzień między rokiem a miesiącem?
kjbartel
10
Jeszcze bardziej niewybaczalne w nazwie pliku, ponieważ lista plików nie może być sortowana według nazwy, aby uzyskać je w kolejności dat i godzin. Od najbardziej znaczących do najmniej znaczących powinien być porządek dnia.
Bernhard Hofmann
4
@Matt - zakładasz, że nazwa pliku jest związana z datą utworzenia / modyfikacji / dostępu, której nie zawsze jest.
Bernhard Hofmann
121

Chciałbym skorzystać z ISO 8601 formatu, bez przekładek:

DateTime.Now.ToString("yyyyMMddTHHmmss")
Christoffer Lette
źródło
7
Jeśli użyjesz DateTime.Now.ToString("o"), da ci to yyyy-MM-ddTHH:mm:ss.fffffff-HH:mm(gdzie ostatnia godzina i minuta przesunięcia to +/- GMT). To prawda, nie działałoby to jako format nazwy pliku, ale "o"formatowanie dobrze znać.
krillgar
16

Mam podobną sytuację, ale chcę spójny sposób, aby móc używać DateTime.Parse również z nazwy pliku, więc wybrałem

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

Kiedy chcę przeanalizować, mogę po prostu odwrócić wywołanie zamiany. W ten sposób nie muszę wpisywać żadnych informacji o rymmdd ani zgadywać, na jakie formaty pozwala DateTime.Parse.

Gabe Haack
źródło
8

Poniższa lista najczęściej używanych specyfikatorów formatu czasu.,

dd - dzień miesiąca, od 01 do 31.

MM - miesiąc , od 01 do 12.

rrrr - rok jako czterocyfrowa liczba.

hh - godzina , używajączegara 12-godzinnego od 01 do 12.

mm - minuty , od 00 do 59.

ss - sekunda , od 00 do 59.

HH - godzina , używajączegara 24-godzinnego od 00 do 23.

tt -oznacznik AM / PM .

Korzystając z powyższego, będziesz mógł utworzyć unikalną nazwę dla swojej nazwy pliku.

Tutaj podałem przykład

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

LUB

Jeśli nie wolisz używać symboli, możesz spróbować również tego.,

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

Mam nadzieję, że to pomoże komuś teraz lub w przyszłości. :)

RajeshKdev
źródło
7

Osobiście lubię to w ten sposób:

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

Ponieważ rozróżnia datę i godzinę.

Charles Clayton
źródło
1
Chyba masz na myśli „yyyy-MM-dd HH.mm.ss”
Filimindji,
3

Możesz spróbować

var result = DateTime.Now.ToString("yyyy-MM-d--HH-mm-ss");
Aghilas Yakoub
źródło
3

Korzystanie z interpolacji ciągu i specyfikatora formatu :

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

Lub jeśli nie jesteś w Ameryce:

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

Ta funkcja jest dostępna w C # 6 i nowszych wersjach języka.

ChickenFeet
źródło
2

Możesz utworzyć ścieżkę do swojego pliku w następujący sposób:

string path = "fileName-"+DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss") + ".txt";
rouhollah ghasempour
źródło