2010-12-11 153 views
4

如果我這樣做時刻字符串長度

// Default implementation of UNIX time of the current UTC time 
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); 
string myResult = ""; 
myResult = Convert.ToInt64(ts.TotalSeconds).ToString(); 

什麼是myResult的最大字符串長度,並且它總是相同的大小?

+0

你爲什麼需要知道? – 2010-12-11 07:55:42

+0

@KarlKnechtel正因爲Neo需要知道兔子洞有多遠才決定是否服用紅色藥丸或藍色藥丸。 – 2015-03-10 13:48:50

回答

17

Int64是一個有符號的64位整數,這意味着它的值範圍從−9,223,372,036,854,775,8089,223,372,036,854,775,807

由於toString沒有用逗號格式化其輸出,因此字符串的最長可能值爲−9223372036854775808,長度爲20個字符。

現在,由於這代表的是UNIX時間戳,我們需要考慮什麼會被視爲「合理」的返回日期。在我寫這篇文章時,當前的UNIX時間戳會接近1292051460,這是一個10位數的數字。

假設最大長度爲10個字符,可以爲您提供從-999999999999999999的時間戳範圍。這給你一個日期範圍從「星期一,1966年10月31日14:13:21 GMT」到「星期六,2286年11月20日17:46:39 GMT」。請注意,我在下界包含否定符號作爲字符,這就是爲什麼下界比上界更接近曆元。

如果你不期望在1966年萬聖節前或2286年11月下旬之後的日期,你可以合理地假定字符串的長度不會超過10個字符。如果您期望日期超出此範圍(很可能在1966年之前,而不是在2286年之後),則可以預計會看到一個11個字符的字符串。我不期待更多。

這就是最大預期的字符數量;它可能會更短。

+0

完美的答案,所以我們可以使用它們來生成具有10位數字的唯一ID,它在處理ID生成器時非常方便。它已經是一個ID,它可以隨時轉換爲Time,因此不需要存儲日期值。 – 2015-03-10 13:52:58

4

假設代碼在將來使用很久,它將是Int64的最大長度。

例如,現在該值是1292022273這樣的長度是10

你可以找到一個計算器,這裏包括秒http://www.timeanddate.com/date/duration.html

+0

它會一直是10嗎? – 001 2010-12-11 07:09:43

+0

不,我想在24世紀的某個時候,它會超過9999999999秒,並變成11長。所以我想這取決於你的意思是「永遠」。你的代碼可能不會在那時。 – 2010-12-11 07:17:55

+7

24世紀我將會死去,而且肯定有人會在這個時間之前解決問題! – 001 2010-12-11 07:44:23

1

如果你堅持Convert.ToInt64()沒有格式化,那麼你的最大長度將爲,因爲最小Int64-9223372036854775808(負號需要額外的字符)。然而,實際上,由於TimeSpanDateTime中的限制,它將不利用由Int64提供的整個範圍。

而且,不,myResult的長度不總是相同的,但可以在1到20的範圍內。它僅取決於當前值Convert.ToInt64(ts.TotalSeconds)

+0

從技術上講,最大長度將是20個字符,因爲Int64s是無符號的。 ;) – AgentConundrum 2010-12-11 07:22:43

+0

@AgentConundrum - 你是對的;我已經更新了自Int64s *簽名* ;-) – 2010-12-11 07:25:57

+0

aaargh ...以來的負面價值帳戶的答案...並且編輯我的評論爲時已晚。我註定要成爲所有永恆的白癡! DOOOOMED! – AgentConundrum 2010-12-11 07:29:09

0

要獲得時間跨度嘗試的最大尺寸使用此代碼:

var maxValue = Convert.ToInt64(TimeSpan.MaxValue).ToString(); 

希望這將有助於你與你的問題!祝你好運!

最好的問候,迪馬。