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

JavaScript Date converting to the wrong Java Date

本文关键字:日期 Java 错误 转换 JavaScript      更新时间:2023-09-26

我有一个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日期到Java日期的正确转换?

注意:这只发生在我的电脑设置为东部标准时间,时钟设置为上午9点左右。除此之外,如果我把我的电脑的时区设置回中央标准时间,那么这就不再是一个问题了。

从epoch到07/02/15的毫秒数为1435809600000。如果我用这些毫秒并创建一个JS Date对象,如new Date(1435809600000),我得到这个:Thu Jul 02 2015 00:00:00 GMT-0400(东部标准时间)。但是,当我尝试创建一个Java日期对象,new Date(1435809600000),我得到:Wed Jul 01 23:00:00 CDT 2015

最好的解决方案是发送长的数据(从1/1/1970开始的毫秒),并从它开始在java中构造一个新的Date。

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

问题绝对是客户端的Local TZ。也许这篇文章可以帮助,通过删除本地化从你的DateTime对象。如何忽略用户的时区和强制日期()使用特定的时区

Try with:

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。但是你可以在展示的时候控制。