Jaki jest Twój ulubiony format daty i godziny w nazwie pliku? [Zamknięte]

88

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.

mika
źródło
2
Zgadzam się z tym wszystkim, z wyjątkiem tego, że uważam to za ważne w szerszym kontekście. Twój format jest najlepszy - użyłbym nawet czterocyfrowej strefy czasowej określonej w ISO8601, aby pomieścić strefy niecałkowite. Zawsze martwiło mnie, że ISO8601 nie odnosi się do zakazanego dwukropka w nazwach plików.
hpekristiansen
Proponuję format oparty na ISO 8601 w poście na blog.xam.de/2016/07/… - ułatwiłby nam świat, gdybyśmy mogli uzgodnić format :-)
Dr. Max Völkel
„zamknięte jako nie konstruktywne”? Istnieją powody za i przeciw każdej propozycji, więc jest ona konstruktywna. Nie musisz
rezygnować

Odpowiedzi:

57

Używam tego:

My-File--2009-12-31--23-59-59.txt
  • Bez odstępów
  • Podwójne kreski oddzielające elementy, dzięki czemu każdy element jest dobrze widoczny
  • Tylko jeden znak interpunkcyjny (myślnik) ułatwia wpisywanie
  • Brak strefy czasowej, ponieważ zawsze pracuję w mojej lokalnej strefie czasowej; gdybym potrzebował jednego, szedłem z UTC i dodawałem „ --UTC” po godzinie.
RichieHindle
źródło
5
Robię mniej więcej to samo, chociaż zaczynam od znacznika czasu, a następnie rzeczy „mój plik”, ponieważ pozwala to przeglądać pliki w porządku chronologicznym, po prostu porządkując nazwy plików w kolejności alfabetycznej.
ChristopheD
2
@ChristopheD: Jasne - zrobiłbym to samo w takim przypadku. Odpowiadając, myślałem o przypadku, w którym masz kilka wersji kilku różnych plików i chcesz, aby były one pogrupowane według nazwy pliku.
RichieHindle
2
Osobiście wolę używać podkreślenia ( _) zamiast podwójnego myślnika, aby oddzielić części. (np. My-File_2009-12-31_23-59-59.txt)
Elie G.
A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extjest ok dla powłoki Linuksa. Bez strefy czasowej, ale z dokładnością do nanosekund.
Ivan Black
14

Używałbym YYYY-MM-DD HHmmssdla 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.

ty
źródło
9
ouch, spacje w nazwach plików?
Saggi Malachi
10
Co jest nie tak ze spacjami?
Joey
41
Tak, przestrzenie są ohydne. Osobiście wyśledzę ludzi, którzy używają spacji w nazwach plików i pobiję ich na śmierć mokrym kijem selera :-)
paxdiablo
1
@Saggi; cóż, prawdopodobnie zasłużyłem na to, ale poważnie - pokaż mi jeden system, który nie obsługuje nazw plików ze spacjami? Z tego, co udało mi się dowiedzieć, nie było zaangażowanych identyfikatorów URI, więc nie przejmuję się zbytnio spacjami. Możesz oczywiście zamienić to miejsce na coś innego, na przykład podkreślenie lub T, ale jest to mniej naturalne, gdy je czytasz.
Ty
1
Zagłosuję na ten (ale nigdy nie użyłbym spacji), a powodem jest 4-cyfrowy rok, który odsunie problem y2k1 (ale nie ten y10k, ale kto tak naprawdę podaje XXXX?).
paxdiablo
8

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

Zjadł
źródło
1
Niezły sposób na złamanie daty i godziny oraz o 1 znak mniej niż odpowiedź @ RichieHindle.
Robino,
3

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.

Dan Diplo
źródło
1
Staram się, aby wszystko było czytelne dla człowieka, jeśli to w ogóle możliwe. Jest to jedna z największych wartości schematów, takich jak notacja JSON. Nawet jeśli uważasz, że nie musi to być czytelne dla człowieka, nigdy nie wiesz, czy chcesz, aby później było czytelne dla człowieka. Ponadto ułatwia debugowanie.
Edan Maor
Link nie działa, do czego poszedł?
rbatt
@rbatt Myślę, że to był tylko tymczasowy problem z MSDN - powinien wrócić teraz.
Dan Diplo
2

Zwykle używam rrrrmmdd. Jeśli wymagana jest większa precyzja, zmienia się na rrrrmmddggmmss

Carlton Jenke
źródło
1

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.

jinzo
źródło