Hängen Sie TimeStamp an einen Dateinamen an

117

Ich bin mehrmals auf dieses Problem gestoßen, bei dem ich mehrere Versionen derselben Datei im selben Verzeichnis haben möchte. Ich habe es mit C # gemacht, indem ich dem Dateinamen einen Zeitstempel mit so etwas hinzugefügt habe DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Gibt es einen besseren Weg, dies zu tun?

Kennzeichen
quelle

Antworten:

259

Sie können die DateTime.ToString-Methode (String) verwenden.

DateTime.Now.ToString("yyyyMMddHHmmssfff")

oder string.Format

string.Format("{0:yyyy-MM-dd_HH-mm-ss-fff}", DateTime.Now);;

oder interpolierte Zeichenfolgen

$"{DateTime.Now:yyyy-MM-dd_HH-mm-ss-fff}"

Es gibt folgende benutzerdefinierte Formatspezifizierer: y (Jahr), M (Monat), d (Tag), h (Stunde 12), H (Stunde 24), m (Minute), s (Sekunde), f (zweiter Bruch), F. (zweiter Bruch, nachgestellte Nullen werden getrimmt), t (PM oder AM) und z (Zeitzone).

Mit Erweiterungsmethode

Verwendung:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

Erweiterungsmethode

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
Damith
quelle
1
Ich habe hinzugefügt Path.GetDirectoryName(fileName), um den vollständigen Pfad zur Datei zu erhalten. Dann ersetzt string.Concat()mit Path.Combine()dem get der vollständigen Dateinamen.
Gilu
17

Ich bevorzuge:

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";

Was macht ToFileTime ()?

Konvertiert den Wert des aktuellen DateTime-Objekts in eine Windows-Dateizeit.

public long ToFileTime()

Eine Windows-Dateizeit ist ein 64-Bit-Wert, der die Anzahl der 100-Nanosekunden-Intervalle darstellt, die seit Mitternacht, 1. Januar 1601, AD (CE) Coordinated Universal Time (UTC), vergangen sind. Windows verwendet eine Dateizeit, um aufzuzeichnen, wann eine Anwendung eine Datei erstellt, darauf zugreift oder in eine Datei schreibt.

Quelle: MSDN-Dokumentation - DateTime.ToFileTime-Methode

Anzeigen
quelle
10

Vielleicht ist das Anhängen DateTime.Now.Ticksstattdessen ein kleines bisschen schneller, da Sie keine 3 Zeichenfolgen erstellen und der Ticks-Wert auch immer eindeutig ist.

Ikarus
quelle
2

Sie können verwenden:

Stopwatch.GetTimestamp();
Joseph
quelle
Mit dieser Antwort erhalten Sie den Zeitstempel!. Hängen Sie es mit der Path-Klasse an eine Datei an, und die Manipulation von Zeichenfolgen ist überhaupt kein Problem. Dies ist nur eine Alternative zu DateTime.ToString-Methode (String) oder string.Format ("{0: JJJJ-MM-TT_HH-MM-SS-TT}", DateTime.Now).
Joseph
1

Sie können stattdessen unten verwenden:

DateTime.Now.Ticks
Gokul
quelle
1

Für aktuelles Datum und Uhrzeit als Name für eine Datei im Dateisystem. Rufen Sie nun die Methode string.Format auf und kombinieren Sie sie mit DateTime.Now für eine Methode, die die richtige Zeichenfolge basierend auf Datum und Uhrzeit ausgibt.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        //
        // Write file containing the date with BIN extension
        //
        string n = string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin",
            DateTime.Now);
        File.WriteAllText(n, "abc");
    }
}

Ausgabe :

C:\Users\Fez\Documents\text-2020-01-08_05-23-13-PM.bin

"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin"

Text- Der erste Teil der erforderlichen Ausgabe Dateien beginnen alle mit Text-

{0: Zeigt an, dass dies ein Platzhalter für Zeichenfolgen ist. Die Null gibt den Index der hier eingefügten Parameter an

JJJJ- Druckt das Jahr in vier Ziffern, gefolgt von einem Bindestrich. Dies hat ein Problem mit "Jahr 10000"

MM- Druckt den Monat zweistellig

dd_ Druckt den Tag zweistellig, gefolgt von einem Unterstrich

hh- Druckt die Stunde zweistellig

mm- Druckt die Minute ebenfalls zweistellig

ss- Wie erwartet werden die Sekunden gedruckt

tt Druckt je nach Tageszeit AM oder PM

Fezal Halai
quelle