如果我这样做
// 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的最大字符串长度是多少,它的大小始终相同吗?
如果我这样做
// 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的最大字符串长度是多少,它的大小始终相同吗?
Int64是一个有符号的64位整数,范围从−9,223,372,036,854,775,808
到9,223,372,036,854,775,807
。
由于toString
不会用逗号格式化其输出,因此字符串的最大可能值为−9223372036854775808
,长度为20个字符。
现在,由于这代表一个UNIX时间戳,我们需要考虑返回什么样的“合理”日期。在我写这篇文章时,当前的UNIX时间戳大约是1292051460
,这是一个10位数。
假设最大长度为10个字符,则时间戳的范围为-99999999
到9999999999
。这给出的日期范围是从“Mon,31 Oct 1966 14:13:21 GMT”到“Sat,20 Nov 2286 17:46:39 GMT”。请注意,我将负号符号作为下限中的一个字符,这就是为什么下限比上限更接近纪元的原因。
如果您不希望看到1966年万圣节之前或2286年11月底之后的日期,则可以合理地假定字符串长度不会超过10个字符。如果您期望日期超出此范围(很可能是1966年之前而不是2286年之后),则可以预期看到一个11个字符的字符串。我不会期望更多。
这是预期的最大字符数;它可能会更短。
如果您坚持使用没有格式的Convert.ToInt64()
,那么您的最大长度将为20,因为最小的Int64
是-9223372036854775808
(负号需要一个额外的字符)。然而,在实践中,由于TimeSpan
和DateTime
的限制,它不会利用Int64
所提供的整个范围。
而且,myResult
的长度并不总是相同的,但可以从1到20不等。这取决于Convert.ToInt64(ts.TotalSeconds)
的当前值。
获取TimeSpan的最大大小,请尝试使用以下代码:
var maxValue = Convert.ToInt64(TimeSpan.MaxValue).ToString();