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.