将时间戳添加到文件名


117

我多次遇到此问题,希望在同一目录中拥有同一文件的多个版本。我一直在使用C#进行操作的方法是在文件名中添加一个像这样的时间戳DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')。有一个更好的方法吗?

Answers:


259

您可以使用DateTime.ToString方法(字符串)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

string.Format

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

或内插字符串

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

有以下自定义格式说明符y(年),M(月),d(天),h(12小时),H(24小时),m(分钟),s(秒),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()的获得完整的文件名。
gilu

17

我更喜欢使用:

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

ToFileTime()有什么作用?

将当前DateTime对象的值转换为Windows文件时间。

public long ToFileTime()

Windows文件时间是一个64位值,代表自1601年1月1日(CE)协调世界时(UTC)的12:00午夜以来经过的100纳秒间隔数。Windows使用文件时间记录应用程序创建,访问或写入文件的时间。

来源:MSDN文档-DateTime.ToFileTime方法


10

也许添加附加DateTime.Now.Ticks内容会更快一点,因为您将不会创建3个字符串,并且ticks值也将始终是唯一的。


2

您可以使用:

Stopwatch.GetTimestamp();

这个答案就是您获得时间戳的方式!。使用Path类将其附加到文件中,并且字符串操作根本不是问题。这仅是DateTime.ToString方法(字符串)或string.Format(“ {0:yyyy-MM-dd_hh-mm-ss-tt}”,DateTime.Now)的替代方法;
约瑟夫

1

您可以改用以下代码:

DateTime.Now.Ticks

1

将“当前日期和时间”作为文件系统上文件的名称。现在调用string.Format方法,并将其与DateTime.Now结合使用,以得到一种基于日期和时间输出正确字符串的方法。

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-用四位数打印年份,后接破折号这有一个“年份10000”问题

MM-以两位数字打印月份

dd_以两位数字打印日期,后跟下划线

hh-以两位数字显示小时

mm-也以两位数字打印分钟

ss-如预期,它将打印秒

tt根据一天中的时间打印AM或PM

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.