【问题标题】:Discrepancy in Converting Date to TimeStamp in javajava中将日期转换为时间戳的差异
【发布时间】:2014-05-06 07:29:43
【问题描述】:

我有一个日期对象如下:

Date date=new Date("Mon, 05 May 2014 12:31:12 +0000")

然后我想获取日期对象的时间戳:

date.getTime()

1399293072000

但这个值不正确,正确的值如下:

1399276872000 
//*** for get timestamp use of http://www.epochconverter.com ***\\

为什么?

【问题讨论】:

  • 1399293072000Mon May 05 12:31:12 2014 +00001399276872000Mon May 05 08:01:12 2014 +0000。所以结果正确的。检查您的时区。
  • 不要使用过时的方法,它们被贬值是有原因的......
  • 使用这个时间戳 ts = new Timestamp(date.getTime());
  • @MadProgrammer getTime() 方法不被弃用检查一次!!!
  • @Naveen Date date=new Date("Mon, 05 May 2014 12:31:12 +0000")

标签: java date timestamp


【解决方案1】:

第一件事,来自JavaDoc for Date

Date(String s)
Deprecated. 
As of JDK version 1.1, replaced by DateFormat.parse(String s).

因此,您使用的构造函数自 1997 以来已被弃用!

接下来,到构造函数使用的JavaDoc for Date.parse

它接受多种语法;特别是,它承认 IETF 标准日期语法:“星期六,1995 年 8 月 12 日 13:30:00 GMT”。它也是 了解美国大陆时区的缩写,但对于 一般用途,应使用时区偏移:“Sat, 12 Aug 1995 13:30:00 GMT+0430"(格林威治以西 4 小时 30 分钟 子午线)。 如果没有指定时区,则为本地时区 假设。 GMT 和 UTC 被认为是等效的。

同情我的。

那么,你在哪个时区?大概不是UTC。

【讨论】:

【解决方案2】:

你应该在构造日期对象时指定本地时区

Example:
Date date=new Date("Mon, 05 May 2014 12:31:12 GMT+0530");

【讨论】:

    【解决方案3】:

    使用 2014 年 5 月 5 日星期一 12:31:12 +0000 http://www.epochconverter.com 我得到 1399285872000,这与您的时间戳不同。

    或者你传递了不同的值,或者某处有错误,或者

    Unix 纪元(或 Unix 时间或 POSIX 时间或 Unix 时间戳)是自 1970 年 1 月 1 日(UTC/GMT 午夜)以来经过的秒数,不包括闰秒(在 ISO 8601 中:1970-01- 01T00:00:00Z)。

    java.util.Date.getTime() 的 javadoc 没有提到闰秒。

    【讨论】:

    • 某处有错误?!这就是你的解释?当然,这可能是对 SO 任何问题的(无用)答案吗?
    猜你喜欢
    • 2021-06-18
    • 2012-08-01
    • 1970-01-01
    • 2014-05-16
    • 2014-12-03
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多