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?

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

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


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.


2

Sie können verwenden:

Stopwatch.GetTimestamp();

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.