gpt4 book ai didi

Java-从日期选择器获取日期时添加时区

转载 作者:行者123 更新时间:2023-12-01 23:18:23 24 4
gpt4 key购买 nike

我有一个 jsp 页面,它从 jquery datapicker 获取值并将其传递到搜索中。该网站的用户有机会更改他们的时区以适应他们所在的世界。我想获取基于浏览器时间的搜索值并对其进行格式化,并将其与用户的时区一起显示在屏幕上。

列是expireDate,我使用数据表来显示结果。

{
"mData":"expireDate",
"mRender":function(source,type,full){
if(-1==source)
return "";
var toDate = new Date(source);
var stringDate = toDate.toString(dateTableFormater);
return stringDate;

我获取该值并传递我自己的自定义格式,该格式基于该人居住的地方。每种格式都不同,具体取决于它们所在的位置,并阻止我使用 simpledateFormat.setTimezoneOffset();

$("#expireFrom").datepicker($.datepicker.regional[plannerLang]);
$("#expireFrom").datepicker( "option", "dateFormat",dateFormater);
$("#expireTo").datepicker($.datepicker.regional[plannerLang]);
$("#expireTo").datepicker( "option", "dateFormat",dateFormater);

我设置了一个 dto,以便它获取用户时区,我只是不知道如何实现它,因此当时间发送回 jsp 时,时区已包含在时间中。如何从浏览器获取的日期中添加/减去时区差异?

最佳答案

调整时区偏移

计算机以通用方式跟踪时间,不受时区信息的影响。他们使用自 epoch 以来的秒/毫秒/纳秒计数。 。因此,调整时区并不是增加或减少时间本身的问题。问题在于将时间/计数的表达式调整为字符串。

乔达时间

捆绑的 java.util.Date/Calendar 类在设计和实现方面都非常糟糕。您应该使用合适的日期时间库。目前,这意味着 Joda-Time 。将来,使用 Java 8,您可以继续使用 Joda-Time 或切换到新的捆绑 java.time.* classes由 JSR 310 定义。这些类受到 Joda-Time 的启发,但完全重新架构。

一个DateTime Joda-Time 中的实例知道自己的时区,这与 java.util.Date 不同。

服务器时间

大多数程序员发现使用服务器时钟比从用户计算机获取时间更明智。用户的机器因与正确时间不同步而臭名昭著。如今,有了互联网和NTP,情况就不再那么真实了。服务器。尽管如此,我建议您坚持使用服务器的时钟。

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

顺便说一下,通常最好在 UTC 工作。 (无时区偏移)在您的业务逻辑中,并切换到仅用于呈现给用户的时区。

时区示例代码

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// import org.joda.time.format.*;

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Athens" );

DateTime now_Athens = new DateTime( timeZone );
DateTime now_Seattle = now_Athens.toDateTime( DateTimeZone.forID( "America/Los_Angeles" ));
DateTime now_UTC = now_Athens.toDateTime( DateTimeZone.UTC );

转储到控制台...

System.out.println( "now_Athens: " + now_Athens );
System.out.println( "now_Seattle: " + now_Seattle );
System.out.println( "now_UTC: " + now_UTC );

运行时...

now_Athens: 2014-01-02T20:11:43.657+02:00
now_Seattle: 2014-01-02T10:11:43.657-08:00
now_UTC: 2014-01-02T18:11:43.657Z

格式化字符串

Joda-Time 有许多通过 formatting 渲染字符串的功能:

  • 您可以使用 Locale 进行格式化-敏感长、中、短formatters
  • 您可以定义自己的格式。
  • 您可以使用标准 ISO 8601格式,默认值,如上所示。

格式化示例代码

DateTimeZone timeZone_Paris = DateTimeZone.forID( "Europe/Paris" );
String nowLocalizedParis = DateTimeFormat.forStyle("LS").withLocale(Locale.FRANCE).withZone( timeZone_Paris ).print( now_UTC );

转储到控制台...

System.out.println( "nowLocalizedParis: " + nowLocalizedParis );

运行时...

nowLocalizedParis: 2 janvier 2014 19:11

关于Java-从日期选择器获取日期时添加时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20887351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com