JavaScript日期转换为错误的Java日期

时间:2015-07-16 14:20:49

标签: javascript java

我有一个JavaScript Date对象Thu Jul 02 2015 00:00:00 GMT-0400 (Eastern Standard Time),它传递给Java方法,该方法将此日期存储在Java Date对象中。但Java日期对象将此日期显示为Wed Jul 01 23:00:00 CDT 2015。如何从JavaScript Date到Java Date获得正确的转换?

注意:只有当我的电脑设置为东部标准时间且时钟设置为上午9点左右时才会发生这种情况。除此之外,如果我将PC的时区设置回中央标准时间,那么这不再是一个问题。

更新

从纪元到2015年2月7日的毫秒数是1435809600000.如果我花了这些毫秒并创建一个JS Date对象,new Date(1435809600000),我得到这个: 2015年7月2日星期四00:00:00 GMT-0400(东部标准时间)。但是当我尝试创建一个Java Date对象new Date(1435809600000)时,我得到: Wed Jul 01 23:00:00 CDT 2015

3 个答案:

答案 0 :(得分:2)

最好的解决方案是将数据发送一段时间(从1970年1月1日开始的毫秒),然后从java开始构建一个新的日期。

Javascript代码

var date = ... // date is of type Date
var dateMillis = date.getTime();  // Milliseconds long representing the date

Java代码

long dateMillis = .... // Milliseconds long representing the date
Date date = new Date(dateMillis);

答案 1 :(得分:0)

问题绝对是客户端的本地TZ。也许这篇文章可以通过从DateTime对象中删除本地化来提供帮助。 How to ignore user's time zone and force Date() use specific time zone

答案 2 :(得分:0)

尝试:

String fromJavascript = "Thu Jul 02 2015 00:00:00 GMT-0400";

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.US);

try {
    Date converted = sdf.parse(fromJavascript);

    System.out.println(converted);
} catch (ParseException e) {            
    e.printStackTrace();
}

转换对象应包含正确的日期。打印的内容取决于正在运行的客户端的TZ。但是你可以在演出时控制。