ผนวก TimeStamp เข้ากับชื่อไฟล์


119

ฉันพบปัญหานี้หลายครั้งซึ่งฉันต้องการมีไฟล์เดียวกันหลายเวอร์ชันในไดเร็กทอรีเดียวกัน วิธีที่ฉันได้รับการทำโดยใช้ C # DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')โดยการเพิ่มการประทับเวลากับชื่อไฟล์ที่มีบางสิ่งบางอย่างเช่นนี้ มีวิธีที่ดีกว่านี้หรือไม่?

คำตอบ:


261

คุณสามารถใช้DateTime ToString Method (String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

หรือสตริงรูปแบบ

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

หรือInterpolated Strings

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

มีตัวระบุรูปแบบที่กำหนดเองต่อไปนี้ y (ปี), M (เดือน), d (วัน), ชั่วโมง (ชั่วโมง 12), H (ชั่วโมง 24), ม. (นาที), วินาที (วินาที), f (เศษวินาที), F (เศษส่วนที่สอง, ศูนย์ต่อท้ายจะถูกตัดออก), t (PM หรือ AM) และ z (เขตเวลา)

ด้วยวิธีการขยาย

การใช้งาน:

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

วิธีการขยาย

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
ฉันได้เพิ่มPath.GetDirectoryName(fileName)เพื่อรับเส้นทางแบบเต็มไปยังไฟล์ จากนั้นแทนที่string.Concat()ด้วยPath.Combine()get ชื่อไฟล์แบบเต็ม
gilu

17

ฉันชอบใช้:

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

ToFileTime () ทำอะไร?

แปลงค่าของวัตถุ DateTime ปัจจุบันเป็นเวลาไฟล์ Windows

public long ToFileTime()

เวลาไฟล์ Windows เป็นค่า 64 บิตที่แสดงถึงจำนวนช่วงเวลา 100 นาโนวินาทีที่ผ่านไปตั้งแต่เวลา 12.00 น. วันที่ 1 มกราคม 1601 AD (CE) เวลาสากลเชิงพิกัด (UTC) Windows ใช้เวลาไฟล์เพื่อบันทึกเมื่อแอปพลิเคชันสร้างเข้าถึงหรือเขียนลงในไฟล์

ที่มา: เอกสาร MSDN - วิธี DateTime ToFileTime


10

บางทีการต่อท้ายDateTime.Now.Ticksแทนจะเร็วกว่าเล็กน้อยเนื่องจากคุณจะไม่ได้สร้าง 3 สตริงและค่าเห็บก็จะไม่ซ้ำกันด้วย


2

คุณสามารถใช้ได้:

Stopwatch.GetTimestamp();

คำตอบนี้เป็นวิธีที่คุณได้รับการประทับเวลา! ต่อท้ายไฟล์โดยใช้คลาส Path และการปรับแต่งสตริงไม่ใช่ปัญหาเลย นี่เป็นทางเลือกสำหรับ DateTime ToString Method (String) หรือ string.Format ("{0: yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now);
โจเซฟ


1

สำหรับวันที่และเวลาปัจจุบันเป็นชื่อสำหรับไฟล์บนระบบไฟล์ ตอนนี้เรียกวิธีการ string.Format และรวมเข้ากับ DateTime ตอนนี้สำหรับวิธีการที่ส่งออกสตริงที่ถูกต้องตามวันที่และเวลา

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

เอาท์พุต:

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

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

ข้อความ - ส่วนแรกของผลลัพธ์ที่ต้องการไฟล์ทั้งหมดจะเริ่มต้นด้วยข้อความ -

{0: ระบุว่านี่คือตัวยึดสตริงค่าศูนย์ระบุดัชนีของพารามิเตอร์ที่แทรกที่นี่

yyyy- พิมพ์ปีเป็นตัวเลขสี่หลักตามด้วยเครื่องหมายขีดซึ่งมีปัญหา "ปี 10,000"

MM- พิมพ์เดือนเป็นตัวเลขสองหลัก

dd_ พิมพ์วันเป็นตัวเลขสองหลักตามด้วยขีดล่าง

hh- พิมพ์ชั่วโมงเป็นตัวเลขสองหลัก

mm- พิมพ์นาทีด้วยตัวเลขสองหลัก

ss- ตามที่คาดไว้มันพิมพ์วินาที

tt พิมพ์ AM หรือ PM ขึ้นอยู่กับช่วงเวลาของวัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.