时间戳字符串长度

16

如果我这样做

// 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的最大字符串长度是多少,它的大小始终相同吗?


你为什么需要知道? - Karl Knechtel
4
仅仅因为Neo需要了解兔子洞的深度才能决定是否要选择红色药丸或蓝色药丸。 - Clain Dsilva
4个回答

39

Int64是一个有符号的64位整数,范围从−9,223,372,036,854,775,8089,223,372,036,854,775,807

由于toString不会用逗号格式化其输出,因此字符串的最大可能值为−9223372036854775808,长度为20个字符。

现在,由于这代表一个UNIX时间戳,我们需要考虑返回什么样的“合理”日期。在我写这篇文章时,当前的UNIX时间戳大约是1292051460,这是一个10位数。

假设最大长度为10个字符,则时间戳的范围为-999999999999999999。这给出的日期范围是从“Mon,31 Oct 1966 14:13:21 GMT”到“Sat,20 Nov 2286 17:46:39 GMT”。请注意,我将负号符号作为下限中的一个字符,这就是为什么下限比上限更接近纪元的原因。

如果您不希望看到1966年万圣节之前或2286年11月底之后的日期,则可以合理地假定字符串长度不会超过10个字符。如果您期望日期超出此范围(很可能是1966年之前而不是2286年之后),则可以预期看到一个11个字符的字符串。我不会期望更多。

这是预期的最大字符数;它可能会更短。


完美的答案,因此我们可以使用它们生成具有10位数字的唯一ID,当您处理ID生成器时,这非常方便。它已经是一个ID,随时可以转换为时间,从而消除了存储日期值的需要。 - Clain Dsilva

5
假设代码在未来长期使用,那么它将是Int64的最大长度。
例如,现在该值为1292022273,因此长度为10。
您可以在此处找到包括秒数的计算器 http://www.timeanddate.com/date/duration.html

不,我认为在24世纪的某个时候,它将超过9999999999秒并变成11位数。所以我想这取决于你对“始终”一词的理解。到那时,你的代码可能已经不存在了。 - Beth Lang
10
到了24世纪,我已经不在人世了,而肯定有人在此之前解决了这个问题! - 001
2
我喜欢简单的答案。 - ymakux

1

如果您坚持使用没有格式的Convert.ToInt64(),那么您的最大长度将为20,因为最小的Int64-9223372036854775808(负号需要一个额外的字符)。然而,在实践中,由于TimeSpanDateTime的限制,它不会利用Int64所提供的整个范围。

而且,myResult的长度并不总是相同的,但可以从1到20不等。这取决于Convert.ToInt64(ts.TotalSeconds)的当前值。


从技术上讲,最大长度应该是20个字符,因为Int64是无符号的。 ;) - AgentConundrum
@AgentConundrum - 你是正确的;我已经更新了答案,以考虑到Int64是有符号的负值;-) - Phil Hunt
啊啊啊...现在太晚了,我无法编辑我的评论。我注定要一直看起来像个白痴!注定了! - AgentConundrum

0

获取TimeSpan的最大大小,请尝试使用以下代码:

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

希望这能对你的问题有所帮助!祝你好运!
最好的问候,Dima。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接