13

如果我这样做

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

4

4 回答 4

34

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

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

现在,由于这代表了一个 UNIX 时间戳,我们需要考虑什么被认为是返回的“合理”日期。在我写这篇文章时,当前的 UNIX 时间戳将接近129205146010 位数字。

假设最大长度为 10 个字符,则为您提供从-99999999到的时间戳范围9999999999。这为您提供了从“1966 年 10 月 31 日星期一 14:13:21 GMT”到“2286 年 11 月 20 日星期六 17:46:39 GMT”的日期范围。请注意,我将否定符号作为字符包含在下限中,这就是为什么下限比上限更接近时代的原因。

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

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

于 2010-12-11T07:20:56.620 回答
5

假设代码在很远的将来使用,它将是 Int64 的最大长度。

例如,现在该值为 1292022273,因此长度为 10。

您可以在此处找到包含秒数的计算器http://www.timeanddate.com/date/duration.html

于 2010-12-11T07:03:01.343 回答
1

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

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

于 2010-12-11T07:11:45.270 回答
0

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

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

希望对您的问题有所帮助!祝你好运!

最好的问候,迪玛。

于 2010-12-11T07:15:06.630 回答