在计算日期时依赖毫秒是否安全?

时间:2012-06-10 11:10:47

标签: java api date

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

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

我问的原因是因为我正在构建一个基于http的公共API,我希望客户端为我提供一个时间戳,我需要处理服务器端。我的问题是,自格林威治标准时间1970年1月1日00:00:00以来,以毫秒为单位询问日期表示是否安全,而不是像yyyy-MM-dd'T'HH这样的完整字符串表示:mm: ss.SSS'Z

4 个答案:

答案 0 :(得分:5)

不,毫秒时间戳远非普遍。我建议您使用标准字符串格式(如RFC 3339)在同一台计算机上的计算机或语言运行时间之间交换时间。另请参阅Wikipedia: System Time

答案 1 :(得分:2)

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

所以看看替代方案:

  • 数字时间戳在消息中占用的空间略小,转换起来更简单,更便宜。但是,如果使用错误的缩放和/或基线,可能会有人误解您的规范。

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

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我将提供对OAuth的引用,而不是直接的回答。 根据{{​​3}}:

  

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

所以,如果你真的不需要毫秒级的肉芽,那就做别人做的事。