Java在从datepicker抓取日期时向日期添加时区

Java在从datepicker抓取日期时向日期添加时区,java,jquery,jsp,timezone,datatables,Java,Jquery,Jsp,Timezone,Datatables,我有一个jsp页面,它从jquery数据采集器获取值并将其传递到搜索中。该网站的用户有机会改变他们的时区,以适应他们在世界上的位置。我想获取搜索的值,它是基于浏览器的时间和格式,并显示在屏幕上与用户的时区 该列是expireDate,我使用datatables显示结果 { "mData":"expireDate", "mRender":function(source,type,full){ if(-1==source) return ""; var toD

我有一个jsp页面,它从jquery数据采集器获取值并将其传递到搜索中。该网站的用户有机会改变他们的时区,以适应他们在世界上的位置。我想获取搜索的值,它是基于浏览器的时间和格式,并显示在屏幕上与用户的时区

该列是expireDate,我使用datatables显示结果

{
    "mData":"expireDate",
    "mRender":function(source,type,full){
    if(-1==source)
    return "";
    var toDate = new Date(source);
    var stringDate = toDate.toString(dateTableFormater);
    return stringDate;
我获取值并传入我自己的自定义格式,格式是基于人居住的地方。每种格式都不同,这取决于它们的居住地,并阻止我使用SimpleDataFormat.setTimezoneOffset()

我设置了一个dto,这样它就可以得到用户的时区,我只是不知道如何实现,所以当时间被发送回jsp时,时区已经包含在时间中了。 如何从浏览器获得的日期中添加/减去时区差?

调整时区偏移量 计算机以通用的方式跟踪时间,没有时区信息。它们使用自事件发生以来的秒/毫秒/纳秒计数。因此,调整时区并不是对时间本身进行加减的问题。这是将该时间/计数的表达式调整为字符串的问题

乔达时间 捆绑的java.util.Date/Calendar类在设计和实现方面都是出了名的糟糕。您应该使用合适的日期时间库。目前,这意味着。将来,使用Java8,您可以继续使用Joda Time或切换到JSR310定义的新绑定。这些课程的灵感来自Joda Time,但完全是重新设计的

与java.util.Date不同,Joda Time中的实例知道自己的时区

服务器时间 大多数程序员发现使用服务器的时钟比从用户的机器上获取时间更明智。用户的机器因与正确的时间不同步而臭名昭著。在今天的互联网和服务器上,情况就不是这样了。尽管如此,我还是建议您坚持使用服务器时钟

您应该从用户的机器上获取他们的信息、国家(文化)和语言

顺便说一下,通常最好在业务逻辑中使用(无时区偏移),并切换到仅用于向用户演示的时区

时区的示例代码
/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
DateTimeZone timeZone=DateTimeZone.forID(“欧洲/雅典”);
DateTime now_Athens=新日期时间(时区);
DateTime now_西雅图=now_雅典.toDateTime(DateTimeZone.forID(“美国/洛杉矶”);
DateTime now\u UTC=now\u Athens.toDateTime(DateTimeZone.UTC);
转储到控制台

System.out.println(“now_Athens:+now_Athens”);
System.out.println(“现在西雅图:+现在西雅图”);
System.out.println(“现在UTC:+现在UTC”);
当运行时

雅典:2014-01-02T20:11:43.657+02:00 现在西雅图:2014-01-02T10:11:43.657-08:00 现在世界时:2014-01-02T18:11:43.657Z 格式化字符串 Joda Time具有许多通过以下方式渲染字符串的功能:

  • 您可以使用-敏感长、中、短格式
  • 您可以定义自己的格式
  • 您可以使用标准格式(默认格式),如上所示
格式化的示例代码
DateTimeZone timeZone_Paris=DateTimeZone.forID(“欧洲/巴黎”);
String nowLocalizedParis=DateTimeFormat.forStyle(“LS”)。withLocale(Locale.FRANCE)。withZone(timeZone\u Paris)。print(now\u UTC);
转储到控制台

System.out.println(“nowLocalizedParis:+nowLocalizedParis”);
当运行时

nowLocalizedParis:2014年1月2日19:11
调整时区偏移 计算机以通用的方式跟踪时间,没有时区信息。它们使用自事件发生以来的秒/毫秒/纳秒计数。因此,调整时区并不是对时间本身进行加减的问题。这是将该时间/计数的表达式调整为字符串的问题

乔达时间 捆绑的java.util.Date/Calendar类在设计和实现方面都是出了名的糟糕。您应该使用合适的日期时间库。目前,这意味着。将来,使用Java8,您可以继续使用Joda Time或切换到JSR310定义的新绑定。这些课程的灵感来自Joda Time,但完全是重新设计的

与java.util.Date不同,Joda Time中的实例知道自己的时区

服务器时间 大多数程序员发现使用服务器的时钟比从用户的机器上获取时间更明智。用户的机器因与正确的时间不同步而臭名昭著。在今天的互联网和服务器上,情况就不是这样了。尽管如此,我还是建议您坚持使用服务器时钟

您应该从用户的机器上获取他们的信息、国家(文化)和语言

顺便说一下,通常最好在业务逻辑中使用(无时区偏移),并切换到仅用于向用户演示的时区

时区的示例代码
/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
//导入org.joda.time.*;
//导入org.joda.time.format.*;
DateTimeZone timeZone=DateTimeZone.forID(“欧洲/雅典”);
DateTime now_Athens=新日期时间(时区);
DateTime now_西雅图=now_雅典.toDateTime(DateTimeZone.forID(“美国/洛杉矶”);
DateTime now\u UTC=now\u Athens.toDateTime(DateTimeZone.UTC);
转储到控制台

System.out.println(“now_Athens:+now_Athens”);
System.out.println(“现在西雅图:+现在西雅图”);
System.out.println(“现在UTC:+现在UTC”);
当运行时

雅典:2014-01-02T20:11:43.657+02:00 现在,西雅图:
$("#expireFrom").datepicker($.datepicker.regional[plannerLang]);
    $("#expireFrom").datepicker( "option", "dateFormat",dateFormater);
    $("#expireTo").datepicker($.datepicker.regional[plannerLang]);
    $("#expireTo").datepicker( "option", "dateFormat",dateFormater);