JavaScript日期对象始终打印在美国/纽约时区?

JavaScript日期对象始终打印在美国/纽约时区?,java,javascript,timezone,jackson,jodatime,Java,Javascript,Timezone,Jackson,Jodatime,我的服务器发送了一个以毫秒为单位的时间戳(),它使用Joda时间,并且始终是固定时区“美国/纽约”。在我的客户机上,我还要保证时间是根据美国/纽约时区显示的。我依赖于,并决定使用新的日期(毫秒)构造函数实例化日期对象是最简单的 现在是最难的部分:我希望能够为在美国/纽约时区以外使用我的网站的客户打印时间。我知道我可以从一个日期对象,所以现在我正在考虑根据偏移量对该对象执行算术,并依靠服务器告诉我是否在DST中。使用 我想要一个既适用于IE8又适用于现代浏览器的解决方案。有什么想法吗?是否有任何小

我的服务器发送了一个以毫秒为单位的时间戳(),它使用Joda时间,并且始终是固定时区“美国/纽约”。在我的客户机上,我还要保证时间是根据美国/纽约时区显示的。我依赖于,并决定使用新的日期(毫秒)构造函数实例化日期对象是最简单的

现在是最难的部分:我希望能够为在美国/纽约时区以外使用我的网站的客户打印时间。我知道我可以从一个
日期对象
,所以现在我正在考虑根据偏移量对该对象执行算术,并依靠服务器告诉我是否在DST中。使用

我想要一个既适用于IE8又适用于现代浏览器的解决方案。有什么想法吗?是否有任何小型实用程序已经以标准方式实现了这一点

// dateTimeAsString is sent from the server (via JSON) as a String
// dateTimeAsString example: "1311387300000"
var dateTimeAsInt = parseInt(dateTimeAsString,10);
var dateTimeInNY = new Date(dateTimeAsInt);

// My current offset is 240
var nyOffset = dateTimeInNY.getTimezoneOffset();

// Somewhere out west
var dateTimeInTexas = new Date(dateTimeAsInt);


var isDST = false; // sent from server


// What I want to do, this is not legal JavaScript
dateTimeInTexas.printWithOffset(isDST,nyOffset);

浏览器没有时区信息。它们只能以UTC和当前操作系统时区显示。甚至不能保证客户对“美国/纽约”时区有任何了解(例如,一台性能差、性能差的移动设备)

如果要在特定时区显示日期,最简单的方法是将其转换为格式化字符串,并将其转换为字符串,而不是毫秒

如果你需要在客户端做一些日历计算,你是不幸的。。。你必须手动操作

顺便说一句,您不能按原样使用timezoneOffset,因为它对于特定日期可能不同,DST也很重要


所以,首先。您想对客户端的日期做些什么?

Hi kan,谢谢您的回答。客户端上的
Date
对象将用于许多事情,但我的要求之一是我可以将其传递给一个需要常规
Date
对象的对象。我可能会改变服务器,让它通过一天、一个月、一年、一小时、一分钟、一秒——我只是觉得这太过分了。传递单个字段是否是我保证生成具有所需显示的
Date
对象的唯一方法?i、 e.我可以显示2011-09-22 12:48PM和硬编码时区信息。在这种情况下,您应该传输日期部分(ISO-8601是一个不错的选择),然后使用日期选择器,这样在客户端使用哪个时区无关紧要,然后按原样传输拾取的字符串,并在服务器端使用纽约时区对其进行解析。并明确地告诉用户所有日期都在这个时区。我记得我已经调查了他们tz实现的GWT源代码-哇,太多了!此外,它还包括相当大的tz info表。是的,我会明确告诉用户所有值都在
America/New_York
时区(这实际上是客户的要求)。我担心的只是我不想写所有这些额外的行来以细粒度的方式序列化/反序列化字段。我认为解决这个问题的方法可能只是发送单独的字段,并使用
新日期(年、月、日[、小时、分钟、秒、毫秒])
构造函数来创建我的对象。我建议您在服务器端使用ISO-8601格式化程序来字符串(jodatime有一个)。在客户端,您必须将字符串转换成js日期对象,然后再转换回来(也许jQuery中已经有一些代码,我不知道)。无论如何,ISO格式很容易解析和格式化。