DateTime.Now.Ticks如何正确工作?

在我的应用程序中,我随机生成文件。 为了确保一个独特的命名,我试图使用自1970年1月1日以来的纳秒:

long time = DateTime.Now.Ticks; String fileName = Convert.ToString(time); Console.WriteLine(fileName); 

现在我看到一些奇怪的东西。 为什么这样的输出? 我的意思是为什么最后4个数字总是一样的? 我可以使用这个作为文件名,这不是问题,但我只是想知道。

 634292263478068039 634292263512888039 634292263541368039 634292263603448039 634292263680078039 

DateTime.Now的分辨率取决于您的系统计时器(在当前Windows操作系统上~10ms)…所以它给出了相同的结束值(不计算任何更多的有限)。

对于你提出的问题,并不是一个真正的答案,而是认为我会在你的总体目标上下功夫。

已经有一种在.NET中生成随机文件名的方法。

请参阅System.Path.GetTempFileName和GetRandomFileName 。

或者,通常使用GUID来命名随机文件。

自1970年1月1日以来,您可以使用这样的代码获得毫秒:

 private static DateTime JanFirst1970 = new DateTime(1970, 1, 1); public static long getTime() { return (long)((DateTime.Now.ToUniversalTime() - JanFirst1970).TotalMilliseconds + 0.5); } 

我有一个类似的问题。

我也看看这个答案: 是否有一个高分辨率(微秒,纳秒)date时间对象可用于CLR? 。

大约一半的下降是由“罗伯特P”与我发现有用的扩展function的答案 。

将当前date时间转换为文件名以保存您可以使用的文件

DateTime.Now.ToFileTime()

这应该解决你的目标