2

在 java 中,您可以调用 Date 对象的 getTime() 方法来表示自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。这种表示在其他编程语言 API 中是否通用?

例如,如果我让使用不同编程语言的 API 的人给我当前日期和时间(以毫秒为单位),我是否可以安全地假设如果我计算这个值,我最终会得到相同的日期和时间在服务器端使用java。

我问的原因是因为我正在通过 http 构建一个公共 API,我希望客户端为我提供一个我需要在服务器端处理的时间戳。我的问题实际上是自 1970 年 1 月 1 日 00:00:00 GMT 以来以毫秒的形式请求日期表示是否安全,而不是像 yyyy-MM-dd'T'HH:mm 这样的完整字符串表示: SS.SSS'Z

4

4 回答 4

5

不,毫秒时间戳远非通用。我建议您使用标准字符串格式(例如RFC 3339)在同一台计算机上的计算机或语言运行时之间交换时间。另请参阅维基百科:系统时间

于 2012-06-10T11:17:46.427 回答
2

您通常不能假设每个数字时间戳都使用 1970 年 1 月 1 日作为基线。但这并不重要,因为您可以将您的 API 指定为需要这种形式的时间戳。调整基线和/或将数字时间戳缩放到您需要的形式是一件小事。

所以看看替代品:

  • 数字时间戳在消息中占用的空间略少,转换更容易和更便宜。但是,存在有人通过使用错误的缩放和/或基线来错误地实现您的规范的风险。

  • 标准(例如 ISO)文本格式使用(略微)更多空间并且稍微难以转换,但存在标准解析器/非解析器实现。(仍然存在有人会使用您的规范不允许的变体的风险。)

  • 非标准的文本格式不是一个好主意,因为格式中可能存在错误实现和歧义。(例如 3 个字母的时区不明确)

  • 文本格式更易于人类阅读;例如用于调试目的。

但总而言之,我认为如果您使用数字或(基于标准的)文本格式并不重要,只要您明确指定所需的格式及其含义即可。

于 2012-06-10T11:24:51.450 回答
1

您可以依赖该日期格式,因为 Java 也只能从操作系统获取该日期。您使用哪种编程语言并不重要。有关更详细的说明,请参阅Wikipedia 中的unix time

于 2012-06-10T11:18:01.550 回答
0

我将参考 OAuth,而不是直接回答。根据OAuth 1.0 规范

除非服务提供商另有规定,否则时间戳以自 1970 年 1 月 1 日 00:00:00 GMT 起的秒数表示。

所以,如果你真的不需要毫秒粒度,那就做别人做的事情。

于 2012-06-10T11:19:16.287 回答