Tambahkan TimeStamp ke Nama File

119

Saya telah menemukan masalah ini beberapa kali di mana saya ingin memiliki beberapa versi dari file yang sama dalam direktori yang sama. Cara saya melakukannya dengan menggunakan C # adalah dengan menambahkan cap waktu ke nama file dengan sesuatu seperti ini DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Apakah ada cara yang lebih baik untuk melakukan ini?

Menandai
sumber

Jawaban:

261

Anda dapat menggunakan DateTime.ToString Method (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

atau string.Format

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

atau String Interpolasi

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

Ada penentu format kustom berikut y (tahun), M (bulan), d (hari), h (jam 12), H (jam 24), m (menit), s (detik), f (pecahan kedua), F (pecahan kedua, nol di belakangnya dipangkas), t (PM atau AM) dan z (zona waktu).

Dengan Metode Ekstensi

Pemakaian:

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

Metode ekstensi

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}
Sial
sumber
1
Saya telah menambahkan Path.GetDirectoryName(fileName)untuk mendapatkan jalur lengkap ke file. Kemudian diganti string.Concat()dengan Path.Combine()get the full filename.
gilu
17

Saya lebih suka menggunakan:

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

Apa yang dilakukan ToFileTime ()?

Mengonversi nilai objek DateTime saat ini ke waktu file Windows.

public long ToFileTime()

Waktu file Windows adalah nilai 64-bit yang mewakili jumlah interval 100-nanodetik yang telah berlalu sejak 12:00 tengah malam, 1 Januari 1601 AD (CE) Waktu Universal Terkoordinasi (UTC). Windows menggunakan waktu file untuk merekam saat aplikasi membuat, mengakses, atau menulis ke file.

Sumber: dokumentasi MSDN - Metode DateTime.ToFileTime

Iklan
sumber
10

Mungkin menambahkan DateTime.Now.Tickssebagai gantinya, sedikit lebih cepat karena Anda tidak akan membuat 3 string dan nilai ticks juga akan selalu unik.

Icarus
sumber
2

kamu bisa memakai:

Stopwatch.GetTimestamp();
Joseph
sumber
ini jawaban cara Anda mendapatkan stempel waktu !. menambahkannya ke file menggunakan kelas Path dan manipulasi string tidak menjadi masalah sama sekali. ini hanya alternatif untuk Metode DateTime.ToString (String) atau string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Joseph
1

Anda dapat menggunakan di bawah ini sebagai gantinya:

DateTime.Now.Ticks
gokul
sumber
1

Untuk tanggal dan waktu saat ini sebagai nama untuk file pada sistem file. Sekarang panggil metode string.Format, dan gabungkan dengan DateTime.Now, untuk metode yang mengeluarkan string yang benar berdasarkan tanggal dan waktu.

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

Keluaran:

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

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

teks- Bagian pertama dari output yang diperlukan Semua file akan dimulai dengan teks-

{0: Menunjukkan bahwa ini adalah placeholder string. Nol menunjukkan indeks parameter yang dimasukkan di sini

yyyy- Mencetak tahun dalam empat digit diikuti dengan tanda hubung. Ini memiliki masalah "tahun 10000"

MM- Mencetak bulan dalam dua digit

dd_ Mencetak hari dalam dua digit diikuti dengan garis bawah

hh- Mencetak jam dalam dua digit

mm- Mencetak menit, juga dalam dua digit

ss- Seperti yang diharapkan, ini mencetak detik

tt Mencetak AM atau PM tergantung pada waktu hari

Fezal halai
sumber