我有一个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
答案 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。但是你可以在演出时控制。