我多次遇到过这个问题,我想在同一目录中拥有同一文件的多个版本。我使用C#进行此操作的方法是在文件名中添加一个带有DateTime.Now.ToString().Replace('/', '-').Replace(':', '.')
之类的时间戳。
有更好的方法吗?
答案 0 :(得分:237)
您可以使用DateTime.ToString Method (String)
DateTime.Now.ToString("yyyyMMddHHmmssfff")
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(P.M或 A.M)和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 :(得分:14)
我更喜欢使用:
string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";
ToFileTime()做什么?
将当前DateTime对象的值转换为Windows文件时间。
public long ToFileTime()
Windows文件时间是一个64位值,表示自公元1601年1月1日午夜12点(美国东部标准时间)协调世界时(UTC)以来经过的100纳秒间隔的数量。 Windows使用文件时间来记录应用程序何时创建,访问或写入文件。
答案 2 :(得分:8)
或许附加DateTime.Now.Ticks
可能会快一点,因为你不会创建3个字符串,并且ticks值也将始终是唯一的。
答案 3 :(得分:2)
你可以使用:
Stopwatch.GetTimestamp();
答案 4 :(得分:2)
以“当前日期和时间”作为文件系统上文件的名称。现在调用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"
text-所需输出的第一部分 文件将全部以文本开头-
{0:表示这是一个字符串占位符 零表示此处插入的参数的索引
yyyy-以四位数打印年份,后跟破折号 这有一个“ 10000年”的问题
MM-用两位数字打印月份
dd_用两位数字打印日期,后跟下划线
hh-用两位数字打印小时
mm-也以两位数字打印分钟
ss-如预期的那样,它将打印秒数
tt根据一天中的时间打印AM或PM
答案 5 :(得分:1)
您可以使用以下代码:
DateTime.Now.Ticks