自从EPOCH的UTC日期返回错误结果后获得毫升?

时间:2016-08-19 12:23:11

标签: java utc epoch

据我所知,Java中的Date.getTime()将返回自EPOCH以来的millis,将日期视为UTC日期。

在Java 6上,我有一个Date,如果我执行Date.getTime(),它会返回自EPOCH以来的millis,考虑到Date在PDT时区。 (运行代码的服务器在PDT时间内配置。)

我希望程序将其视为UTC日期并返回自EPOCH以来的毫秒数。

以下是我的代码段和输出:

 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以来为UTC日期:2016-08-19 12:04:56.993)

简而言之,我想从EPOCH获得毫无疑问,无论当地时区如何,在我的情况下都是PDT。

请帮忙。

3 个答案:

答案 0 :(得分:2)

根据Java Doc getTime(

  

返回自1970年1月1日00:00:00以来的毫秒数   GMT

它不使用本地时区

答案 1 :(得分:1)

除了johnhopkins已经说过的内容之外。

var and = document.querySelectorAll(".one.two"); var or = document.querySelectorAll(".one, .two"); var xor = document.querySelectorAll(".one:not(.two), .two:not(.one)"); var nor = document.querySelectorAll("button:not(.one):not(.two)"); 对象将时间存储在Date中。但是当你打印出来时,它将被打印为你当前时区的日期。

以下代码段演示了它。

milliseconds since January 1, 1970, 00:00:00 GMT

输出

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);

两行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 使用您的默认时区打印日期date from ...

答案 2 :(得分:0)

使用this answerthis question的信息,我能够提供能够正确解析String作为UTC日期时间的代码。诀窍是在创建SimpleDateFormat对象之前使用String对象来解析Date

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());

输出:

Fri Aug 19 08:04:56 EDT 2016
1471608296993