Was ist Ihr bevorzugtes Datums- und Uhrzeitformat in einem Dateinamen? [geschlossen]

87

Dies ist eine etwas subjektive Frage, die im großen Schema der Dinge nicht sehr wichtig ist, aber mich dennoch regelmäßig nervt. Es scheint keine selbstverständliche Möglichkeit zu geben, einen Zeitstempel in einen Dateinamen einzufügen .

Ziel ist, dass Zeitstempel in Dateinamen sortierbar sein sollten . In .NET sortierbare Datumsformate wie "s" ( "yyyy-MM-ddTHH:mm:ss") und "u" ( "yyyy-MM-dd HH:mm:ssZ") sind jedoch in Dateinamen aufgrund von ':' Zeichen nicht gültig.

Eine andere Sache ist, dass Sie leicht sehen sollten, ob universelle oder lokale Zeit verwendet wird. In der Praxis scheinen Benutzer die Ortszeit der Weltzeit vorzuziehen.

Ich habe meistens ISO 8601 mit dem grundlegenden Zeitformat verwendet:

  • Lokale Zeitformatzeichenfolge "yyyy-MM-ddTHHmmsszz"
  • Zeichenfolge im UTC-Format "yyyy-MM-ddTHHmmssZ"

In diesen Formaten wäre meine aktuelle Ortszeit "2009-08-08T151800+03"und UTC"2009-08-08T121800Z"

Sie können DateTime.Kind auch automatisch mit "K" erkennen und verwenden "yyyy-MM-ddTHHmmssK", aber dann müssen Sie die Zeichen ':' ersetzen.

Irgendwelche anderen Vorschläge?

Edit: Ein paar Anmerkungen bisher:

Das lokale Zeit- und Zeitzonenformat kann "yyyy-MM-ddTHHmmsszz"nicht mehr sortiert werden, wenn mehrere Zeitzonen betroffen sind. In den meisten Fällen wäre es sinnvoll, die Zeitzoneninformationen zu löschen, wenn sie redundant sind, und UTC anderweitig zu verwenden.

Eine andere Sache ist, dass UTC immer mit 'Z', 'GMT' oder 'UTC' gekennzeichnet sein sollte, um Vermutungen und Fehler zu vermeiden.

Julianische Datteln und andere Stardaten sind cool, weil die Datumsarithmetik mit dem gregorianischen Kalender ein Kinderspiel ist.

mika
quelle
2
Ich stimme all dies außer , dass ich tue es in dem großen Plan der Dinge wichtig finden. Ihr Format ist das beste. Ich würde sogar eine 4-stellige Zeitzone gemäß ISO8601 verwenden, um nicht ganzzahlige Zonen zu berücksichtigen. Es hat mich immer gestört, dass ISO8601 den verbotenen Doppelpunkt in Dateinamen nicht behandelt.
HPekristiansen
Ich schlage ein Format vor, das auf ISO 8601 basiert, in einem Beitrag auf blog.xam.de/2016/07/… - würde unsere Welt einfacher machen, wenn wir uns auf ein Format einigen könnten :-)
Dr. Max Völkel
"geschlossen als nicht konstruktiv" ?? Es gibt Gründe für und gegen jeden Vorschlag, daher ist er konstruktiv. Keine Notwendigkeit, sich vor einer Frage über die feineren philosophischen Details der Dateinamen zu scheuen: D
Tanius

Antworten:

57

Ich benutze das:

My-File--2009-12-31--23-59-59.txt
  • Kein Platz
  • Doppelte Striche, um die Teile zu trennen, sodass jedes Teil gut sichtbar ist
  • Nur ein Interpunktionszeichen (Bindestrich) erleichtert die Eingabe
  • Keine Zeitzone, weil ich für mich immer in meiner lokalen Zeitzone arbeite; Wenn ich einen brauchte, würde ich mit UTC gehen und --UTCnach der Zeit " " anhängen .
RichieHindle
quelle
5
Ich mache ungefähr das Gleiche, obwohl ich mit dem Zeitstempel und dann mit dem 'Meine-Datei'-Zeug beginne , da man so die Dateien in chronologischer Reihenfolge anzeigen kann, indem man einfach die Dateinamen alphabetisch sortiert.
ChristopheD
2
@ChristopheD: Sicher - ich würde das gleiche in diesem Fall tun. Als Antwort habe ich an den Fall gedacht, in dem Sie mehrere Versionen verschiedener Dateien haben und diese nach Dateinamen gruppieren möchten.
RichieHindle
2
Persönlich bevorzuge ich die Verwendung von Unterstrich ( _) anstelle von Doppelstrichen, um die Teile zu trennen. (zB 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.extist für Linux-Shell in Ordnung. Keine Zeitzone, aber mit einer Genauigkeit von Nanosekunden.
Ivan Black
14

Ich würde YYYY-MM-DD HHmmssfür Dateinamen verwenden, es sei denn, es besteht ein besonderer Bedarf an Zeitzonen oder eine mögliche Notwendigkeit, diese in ISO-Daten zu analysieren. In diesen Fällen wäre ein ISO-Datum wahrscheinlich vorzuziehen.

Bearbeiten: Zeitzonen sollten eigentlich nie benötigt werden; Alles in UTC zu speichern und die Leute wissen zu lassen, dass alles UTC ist, ist effizienter als die Zeitzone von allem anzugeben.

Du
quelle
7
autsch, Leerzeichen in deinen Dateinamen?
Saggi Malachi
9
Was ist los mit Leerzeichen?
Joey
40
Ja, Räume sind abscheulich. Ich werde persönlich Leute
ausfindig machen
1
@Saggi; Nun, ich habe das wahrscheinlich verdient, aber im Ernst - zeigen Sie mir ein System, das Dateinamen nicht mit Leerzeichen behandelt? Soweit ich das beurteilen konnte, waren keine URIs beteiligt, und daher mache ich mir keine allzu großen Sorgen um Leerzeichen. Sie können diesen Platz natürlich gegen etwas anderes austauschen, z. B. einen Unterstrich oder T, aber das ist weniger natürlich, wenn Sie es lesen.
Sie
1
Ich werde für dieses stimmen (aber ich würde niemals Leerzeichen verwenden), der Grund dafür ist das 4-stellige Jahr, das das y2k1-Problem abschreckt (aber nicht das y10k-Jahr, aber wer gibt wirklich ein XXXX dazu?).
Paxdiablo
8

Folgendes benutze ich:

    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();
    }

Es braucht ein Datum und eine Beschreibung. Verwenden wir "Ich mag HUNDE". Ergebnisse in:

ILikeDogs_1999-09-23_18-42

N-aß
quelle
1
Gute Möglichkeit, Datum und Uhrzeit zu brechen und 1 Zeichen weniger als die Antwort von @ RichieHindle.
Robino
3

Muss der Zeitstempel für Menschen lesbar sein? Wenn nicht, können Sie einfach DateTime.Ticks.ToString () verwenden . Sehr genau, sortierbar und ohne Sonderzeichen.

Dan Diplo
quelle
1
Ich neige dazu, alles menschlich lesbar zu machen, wenn es überhaupt möglich ist. Dies ist einer der großen Werte von Schemata wie der JSON-Notation. Selbst wenn Sie nicht glauben, dass es für Menschen lesbar sein muss, wissen Sie nie, ob Sie möchten, dass es später für Menschen lesbar ist. Außerdem erleichtert dies das Debuggen.
Edan Maor
Der Link ist ausgefallen, wohin ist er gegangen?
Rbatt
@rbatt Ich denke, es war nur ein vorübergehendes MSDN-Problem - sollte jetzt zurück sein.
Dan Diplo
2

Normalerweise benutze ich yyyymmdd. Wenn weitere Präzision erforderlich ist, ändert sich diese in yyyymmddhhmmss

Carlton Jenke
quelle
1

Ich verwende Unix-Zeitstempel, z. Wie viele Sekunden vergingen von der Epoche? Alle Zeiten in UTC. Aber wenn Sie möchten, können Sie auch Zeitzonendaten voranstellen.

Jinzo
quelle