Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime.Now.Ticks究竟是如何工作的?_C#_.net_Datetime - Fatal编程技术网

C# DateTime.Now.Ticks究竟是如何工作的?

C# DateTime.Now.Ticks究竟是如何工作的?,c#,.net,datetime,C#,.net,Datetime,在我的应用程序中,我随机生成文件。为了确保命名的唯一性,我从1970年1月1日开始尝试使用nano seconds: long time = DateTime.Now.Ticks; String fileName = Convert.ToString(time); Console.WriteLine(fileName); 现在我看到了一些奇怪的东西。为什么输出是这样的?我是说为什么最后4个数字总是一样的?我可以用它作为文件名,这不是问题,但我只是想知道它 634292263478068039

在我的应用程序中,我随机生成文件。为了确保命名的唯一性,我从1970年1月1日开始尝试使用nano seconds:

long time = DateTime.Now.Ticks;
String fileName = Convert.ToString(time);
Console.WriteLine(fileName);
现在我看到了一些奇怪的东西。为什么输出是这样的?我是说为什么最后4个数字总是一样的?我可以用它作为文件名,这不是问题,但我只是想知道它

634292263478068039
634292263512888039
634292263541368039
634292263603448039
634292263680078039

的分辨率取决于您的系统计时器(在当前Windows操作系统上约为10ms)…因此它在那里给出了相同的结束值(没有比这更有限的值)。

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

DateTime.Now.ToFileTime();

这应该能解决你的目标

这并不是对你的问题的回答,但我想我会插嘴谈谈你的总体目标

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

见和


或者,使用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);
}

我也有类似的问题

我还要看看这个答案:



大约一半是“Robert p”写的,其中有一些扩展函数我觉得很有用。

但为什么它的末尾正好是39,而不是一个偶数?是的,或多或少很清楚,我只是想知道为什么即使我重新启动计算机或应用程序,它的值总是39。@Roflcoptr-我不能说,这最终取决于你的系统时钟硬件…如果你在另一台有不同主板的机器上尝试,你可能会看到不同的结果。因为系统计时器。这与计算机何时打开或程序何时启动无关。这取决于机器。如果你在另一台机器上运行它,很可能会得到不同的结束号码。需要注意的是,它的间隔并不总是10毫秒。使用flash启动chrome,它将下降到1ms。由于可以通过多媒体API在1到15毫秒之间设置内核计时。
计时
不是自
1.1.1970以来的纳秒级
,因此您可能会与JavaScript
getTime()
方法混淆。摘自msdn官方网站:此属性的值表示自0001年1月1日午夜12:00:00以来经过的100纳秒间隔数()准确地说,滴答声不是纳秒,滴答声表示100纳秒。单个滴答声表示100纳秒或1千万分之一秒。一毫秒内有10000个滴答声,或一秒钟内有1000万个滴答声。谢谢,但是这个方法会返回加密的图形名称,所以我只喜欢一些数字,它们的优点是可以很容易地相互比较
GetRandomFileName
:我甚至不知道它们的存在@StevenRands我不相信
GetRandomFileName
返回未使用的文件名,而
GetTempFileName
返回未使用的文件名。@Dai这是正确的
GetTimeFileName
实际上会在磁盘上创建一个(0字节)文件,而
GetRandomFileName
只是返回一个可以用作文件名的字符串,因此可能会发生冲突(尽管可能性不大).不是我的反对票…但这将有与
.Ticks
.o_o-->相同的时间分辨率问题结尾的+0.5是什么@Noctis粗糙的舍入技术,我习惯于将字体转换为整数/长。1.9将以这种方式转换为2,而不是1。有趣的是。。。当您将datetime转换为毫秒时,可能没有那么重要,但我会记住它以备将来使用……:)这是否适应午夜?@DanGifford是的,DateTime构造函数重载将小时、分钟和秒全部默认为0