【问题标题】:Timestamp string length时间戳字符串长度
【发布时间】:2011-05-23 20:55:26
【问题描述】:

如果我这样做了

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

【问题讨论】:

  • 为什么需要知道?
  • @KarlKnechtel 只是因为 Neo 需要知道兔子洞能走多远来决定是吃红色药丸还是蓝色药丸。

标签: c# string timestamp utc string-length


【解决方案1】:

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 个字符的字符串。我不会期待更多。

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

【讨论】:

  • 完美的答案,所以我们可以使用这些来生成具有 10 位数字的唯一 ID,当您处理 ID 生成器时,它会派上用场。它已经是一个 ID,可以随时转换为时间,因此无需存储日期值。
【解决方案2】:

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

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

你可以在这里找到一个包含秒数的计算器http://www.timeanddate.com/date/duration.html

【讨论】:

  • 不,我想在 24 世纪的某个时候,它会超过 9999999999 秒,变成 11 长。所以我想这取决于你所说的“总是”是什么意思。到那时你的代码可能已经不存在了。
  • 24 世纪我将死去,在此之前肯定会有人解决这个问题!
  • 我喜欢简单的答案
【解决方案3】:

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

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

【讨论】:

  • 技术上最大长度为 20 个字符,因为 Int64 是无符号的。 ;)
  • @AgentConundrum - 你是对的;我已经更新了答案来解释负值,因为 Int64 是 signed ;-)
  • aaargh... 现在编辑我的评论为时已晚。我注定永远看起来像个白痴!厄运!
【解决方案4】:

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

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

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

最好的问候,迪玛。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2020-11-22
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    相关资源
    最近更新 更多