Nối TimeStamp vào một tên tệp


117

Tôi đã gặp vấn đề này vài lần trong đó tôi muốn có nhiều phiên bản của cùng một tệp trong cùng một thư mục. Cách tôi đã làm khi sử dụng C # là thêm dấu thời gian vào tên tệp với một cái gì đó như thế này DateTime.Now.ToString().Replace('/', '-').Replace(':', '.'). Có cách nào tốt hơn để làm điều này?

Câu trả lời:


259

Bạn có thể sử dụng Phương thức DateTime.ToString (Chuỗi)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

hoặc string.Format

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

hoặc Chuỗi nội suy

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

Có các thông số định dạng tùy chỉnh sau đây y (năm), M (tháng), d (ngày), h (giờ 12), H (giờ 24), m (phút), s (giây), f (phân số thứ hai), F (phần thứ hai, các số 0 ở cuối được cắt bớt), t (PM hoặc AM) và z (múi giờ).

Với phương pháp mở rộng

Sử dụng:

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

Phương pháp mở rộng

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
Tôi đã thêm Path.GetDirectoryName(fileName)để có được đường dẫn đầy đủ đến tệp. Sau đó, thay thế string.Concat()bằng Path.Combine()lấy tên tệp đầy đủ.
gilu

17

Tôi thích sử dụng:

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

ToFileTime () làm gì?

Chuyển đổi giá trị của đối tượng DateTime hiện tại thành thời gian tệp Windows.

public long ToFileTime()

Thời gian tệp Windows là giá trị 64 bit đại diện cho số khoảng thời gian 100 nano giây đã trôi qua kể từ 12 giờ đêm, ngày 1 tháng 1 năm 1601 sau Công nguyên (CE) Giờ phối hợp (UTC). Windows sử dụng thời gian tệp để ghi lại khi ứng dụng tạo, truy cập hoặc ghi vào tệp.

Nguồn: Tài liệu MSDN - Phương pháp DateTime.ToFileTime


10

DateTime.Now.TicksThay vào đó, có lẽ việc nối thêm , nhanh hơn một chút vì bạn sẽ không tạo 3 chuỗi và giá trị tick sẽ luôn là duy nhất.


2

bạn có thể dùng:

Stopwatch.GetTimestamp();

câu trả lời này theo cách bạn lấy dấu thời gian !. thêm nó vào một tệp bằng cách sử dụng lớp Path và thao tác chuỗi hoàn toàn không phải là vấn đề. đây chỉ là một sự thay thế cho Phương thức DateTime.ToString (Chuỗi) hoặc string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
Joseph

1

Bạn có thể sử dụng bên dưới để thay thế:

DateTime.Now.Ticks

1

Đối với ngày và giờ hiện tại làm tên cho tệp trên hệ thống tệp. Bây giờ hãy gọi phương thức string.Format và kết hợp nó với DateTime.Now, để có một phương thức xuất ra chuỗi chính xác dựa trên ngày và giờ.

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

Đầu ra:

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

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

text- Phần đầu tiên của đầu ra Các tệp bắt buộc sẽ bắt đầu bằng văn bản-

{0: Cho biết đây là trình giữ chỗ chuỗi Số 0 cho biết chỉ mục của các tham số được chèn ở đây

yyyy- In năm dưới dạng bốn chữ số theo sau bởi dấu gạch ngang Cái này có vấn đề "năm 10000"

MM- In tháng ở dạng hai chữ số

dd_ In ngày bằng hai chữ số theo sau là dấu gạch dưới

hh- In giờ bằng hai chữ số

mm- In phút, cũng bằng hai chữ số

ss- Đúng như mong đợi, nó in giây

tt In SA hoặc CH tùy thuộc vào thời gian trong ngày

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.