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

时间:2010-12-29 12:36:41

标签: c# .net datetime

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

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

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

634292263478068039
634292263512888039
634292263541368039
634292263603448039
634292263680078039

5 个答案:

答案 0 :(得分:41)

DateTime.Now的分辨率取决于您的系统计时器(当前Windows操作系统上约10毫秒)...所以它在那里给出了相同的结束值(它不再计算有限值)。< / p>

答案 1 :(得分:16)

对于你提出的问题并不是真正的答案,但我认为我会关注你的总体目标。

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

请参阅System.Path.GetTempFileNameGetRandomFileName

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

答案 2 :(得分:14)

你可以使用这样的代码获得自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);
}

答案 3 :(得分:1)

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

  

DateTime.Now.ToFileTime()

这应该可以解决你的目标

答案 4 :(得分:1)

我遇到了类似的问题。

我也会看看这个答案:Is there a high resolution (microsecond, nanosecond) DateTime object available for the CLR?

大约一半的时间是an answer“罗伯特P”,我发现有些扩展功能很有用。