2010-12-11 120 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(); 

希望这将有助于你与你的问题!祝你好运!

最好的问候,迪马。