Getting the millis since EPOCH of an UTC date returning wrong results?
本问题已经有最佳答案,请猛点这里访问。
据我所知,Java中的Date.getTime()将返回自EPOCH以来的毫秒,将日期视为UTC日期。
在Java 6上,我有一个Date,如果我执行Date.getTime(),它将返回自EPOCH以来的millis,考虑到Date在PDT时区。 (运行代码的服务器在PDT时间内配置。)
我希望程序将其视为UTC日期并返回自EPOCH以来的毫秒数。
以下是我的代码片段和输出:
1 2 3 4 5 6 | logger.debug("Date:" + someDate); logger.debug("someDate in millis):" + someDate.getTime()); Output: Date: 2016-08-19 12:04:56.993 someDate in millis: 1471633496993 //This is time since EPOCH for 2016-08-19 12:04:56.993 PDT |
而我希望它返回millis为1471608296993(1471608296993是自EPOCH以来的毫秒数据日期:2016-08-19 12:04:56.993)
总之,我想从EPOCH获得毫无疑问,无论当地时区,在我的情况下是PDT。
请帮忙。
根据Java Doc
Returns the number of milliseconds since January 1, 1970, 00:00:00
GMT
它不使用本地时区
除了johnhopkins已经说过的内容之外。
以下代码段演示了它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC")); cal.set(Calendar.YEAR, 2016); cal.set(Calendar.MONTH, Calendar.AUGUST); cal.set(Calendar.DAY_OF_MONTH, 19); cal.set(Calendar.HOUR_OF_DAY, 12); cal.set(Calendar.MINUTE, 4); cal.set(Calendar.SECOND, 56); cal.set(Calendar.MILLISECOND, 993); long epochMillis = cal.getTime().getTime(); System.out.println("EPOCH millis =" + epochMillis); System.out.println("date from cal =" + cal.getTime()); Date date = new Date(epochMillis); System.out.println("date from epoch =" + date); |
产量
1 2 3 | EPOCH millis = 1471608296993 date from cal = Fri Aug 19 14:04:56 CEST 2016 date from epoch = Fri Aug 19 14:04:56 CEST 2016 |
两行
使用此问题的答案中的信息,我能够提出将
1 2 3 4 5 6 | String strDate ="2016-08-19 12:04:56.993"; SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); isoFormat.setTimeZone(TimeZone.getTimeZone("UTC")); Date date = isoFormat.parse(strDate); System.out.println(date); System.out.println(date.getTime()); |
输出:
1 2 | Fri Aug 19 08:04:56 EDT 2016 1471608296993 |