2015-04-07 132 views
0

首先,關於我的無知,我的可怕的英語技能對不起,我努力提高them.So在這裏不用我的問題:可以DateTime.Ticks值重複,因爲文化小時改變

我想用DateTime.Ticks (而不是Guid.NewGuid)來計算一個標識符,並向我提出一個問題。在我目前的文化中,我們有兩天的時間來改變官方時間:在octuber中,我們增加了一個小時,在四月份,我們刪除了它。 它如何影響滴答價值?如何計算蜱的價值?據我所知,基於https://msdn.microsoft.com/en-us/library/system.datetime.ticks%28v=vs.110%29.aspx它似乎不能成爲一個重複值,因爲基於文本(...)它不包括歸因於閏秒(...)的滴答數。 有可能會重複滴答?(也許其他問題將是滴答持續多長時間,取決於計算機?) 如果我沒有錯,它不能重複。

此外,也許有可能是很多東西我誤會所以我真的很抱歉,再次...

+0

如果您的動機是確保順序標識符,您可能需要考慮使用['UuidCreateSequential'](http://stackoverflow.com/a/9538870/18192 )。 – Brian

回答

6

即使沒有 DST的變化,可以觀察DateTime.Now.Ticks多次返回相同的值,由於系統時鐘的粒度。

但是,如果您使用DateTime.Now,DST將發生變化,您確實會看到每年重複一小時的相同值。該Ticks財產只是「自DateTime時代以來,以任何類型的價值爲代表的滴答數」。 (A DateTime值可以是三個「種」一個 - 通用,本地或不確定這是all a bit of a mess。)

如果使用DateTime.UtcNow你不應該看到,如果系統時鐘只有前進...但系統時鐘完全可以通過手動或自動方式進行更改,以糾正漂移。基本上,它本身並不是一個很好的獨特來源。

(在蜱的長度方面 - 在DateTime所述蜱是總是 100ns的這是不正確的Stopwatch,您需要使用Frequency屬性來找出蜱有多長,或者使用。 Elapsed屬性只是查找流逝的時間作爲TimeSpan。)

+0

所以,如果我使用utf否,並且如果我使用System.DateTime.Now.Ticks是嗎? – MirlvsMaximvs

+0

@Mirlo:是的,不是,*完全是什麼? –

+0

如果系統時間從未更改過var x = System.DateTime.UtcNow.Ticks; - >可能不會重複的值,因爲DST 和var y = System.DateTime.Now.Ticks是 – MirlvsMaximvs