Jest to pytanie nieco subiektywne i niezbyt ważne w szerszej perspektywie, ale coś, co mnie regularnie irytuje. Wydaje się, że nie ma oczywistego sposobu na umieszczenie znacznika czasu w nazwie pliku .
Celem jest to, aby sygnatury czasowe w nazwach plików dawały się sortować . Jednak sortowalne formaty dat .NET, takie jak „s” ( "yyyy-MM-ddTHH:mm:ss"
) i „u” ( "yyyy-MM-dd HH:mm:ssZ"
), nie są prawidłowe w nazwach plików z powodu znaków „:”.
Inną rzeczą jest to, że powinieneś łatwo sprawdzić, czy używany jest czas uniwersalny, czy lokalny . W praktyce użytkownicy wolą czas lokalny od czasu uniwersalnego.
Skończyło się na tym, że używałem ISO 8601 z podstawowym formatem czasu:
- Ciąg formatu czasu lokalnego
"yyyy-MM-ddTHHmmsszz"
- Ciąg formatu UTC
"yyyy-MM-ddTHHmmssZ"
W tych formatach mój aktualny czas lokalny to "2009-08-08T151800+03"
i UTC"2009-08-08T121800Z"
Możesz również automatycznie wykryć DateTime.Kind za pomocą „K” i użyć "yyyy-MM-ddTHHmmssK"
, ale wtedy będziesz musiał zamienić znaki „:”.
Jakieś inne sugestie?
Edycja: kilka uwag do tej pory:
Czas lokalny i format strefy czasowej "yyyy-MM-ddTHHmmsszz"
nie są już sortowane, jeśli zaangażowanych jest wiele stref czasowych. W większości przypadków sensowne byłoby porzucenie informacji o strefie czasowej, jeśli są one nadmiarowe, i użycie czasu UTC w innym przypadku.
Inną rzeczą jest to, że UTC zawsze powinien być oznaczony „Z”, „GMT” lub „UTC”, aby uniknąć zgadywania i pomyłek.
Daty juliańskie i inne gwiezdne są fajne, ponieważ arytmetyka dat w kalendarzu gregoriańskim jest Braindead.
Odpowiedzi:
Używam tego:
My-File--2009-12-31--23-59-59.txt
--UTC
” po godzinie.źródło
_
) zamiast podwójnego myślnika, aby oddzielić części. (np.My-File_2009-12-31_23-59-59.txt
)name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.ext
jest ok dla powłoki Linuksa. Bez strefy czasowej, ale z dokładnością do nanosekund.Używałbym
YYYY-MM-DD HHmmss
dla nazw plików, chyba że istnieje szczególna potrzeba stref czasowych lub możliwa potrzeba przeanalizowania ich w postaci dat ISO; w takich przypadkach prawdopodobnie preferowana byłaby data ISO.Edycja: Strefy czasowe nigdy nie powinny być wymagane; zapisywanie wszystkiego w UTC i informowanie ludzi, że to wszystko UTC jest bardziej wydajne niż określanie strefy czasowej wszystkiego.
źródło
T
, ale jest to mniej naturalne, gdy je czytasz.Oto czego używam:
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(); }
Potrzeba daty i opisu. Użyjmy „Lubię PSY”. Prowadzi do:
ILikeDogs_1999-09-23_18-42
źródło
Czy istnieje wymóg, aby sygnatura czasowa była czytelna dla człowieka? Jeśli nie, możesz po prostu użyć DateTime.Ticks.ToString () . Bardzo dokładne, możliwe do sortowania i bez znaków specjalnych.
źródło
Zwykle używam rrrrmmdd. Jeśli wymagana jest większa precyzja, zmienia się na rrrrmmddggmmss
źródło
Używam uniksowych znaczników czasu, np. ile sekund minęło od epoki. Cały czas w UTC. Ale zgadnij, że możesz poprzedzić dane strefy czasowej, jeśli chcesz.
źródło