簡體   English   中英

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

[英]How does DateTime.Now.Ticks exactly work?

在我的應用程序中,我隨機生成文件。 為了確保獨特的命名,我嘗試使用自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操作系統上大約10毫秒)......所以它在那里給出了相同的結束值(它不再計算有限值)。

問題並不是你問題的答案,但我想我會關注你的總體目標。

已經有一種在.NET中生成隨機文件名的方法。

請參見System.Path.GetTempFileNameGetRandomFileName

或者,通常的做法是使用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);
}

我遇到了類似的問題。

我也會看看這個答案: CLR有高分辨率(微秒,納秒)的DateTime對象嗎?

大約一半是“羅伯特P” 的回答 ,我發現一些有用的擴展功能。

將當前日期時間轉換為文件名以保存可以使用的文件

DateTime.Now.ToFileTime();

這應該解決你的目標

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM