如何显示正确的时区给用户



我有一个带有Saas网站和注册用户的Java SE服务器应用程序。

我的服务器在不同的日子里发生了许多事件。

通过SYSTEM.currentTimeMillis()/1000

在本地主机上以长数字注册时间

注册用户可以从他们各自的国家检查这些事件时间,他们需要通过网站看到基于他们的时区(而不是服务器时区)的正确时间。

如何显示他们所在时区中事件的历史时间?你知道你会怎么处理这种情况吗?

最简单的方法是使用http://momentjs.com/timezone/。想法如下-你发送像这样的html标记

<div class="raw-datetime">2014-12-01 12:00:00 UTC+03:00</div>

在页面加载后-你运行javascript调整所有原始日期时间到浏览器的时区

java.time

首先需要确定用户的时区。在StackOverflow上搜索一下,最终最好的方法是询问用户。您可以尝试在浏览器上使用JavaScript来自动检测时区,但是存在一些问题。

您需要到达一个适当的时区名称,通常是大陆/城市地区,如America/MontrealAsia/Kolkata。不要使用像ESTIST这样的3-4个字母的代码,因为它们既不标准化也不唯一。

要本地化日期-时间,您需要知道用户的Locale、人类语言和一组文化规范。

有了时区后,使用新的java。时间框架内置于Java 8及以后版本中。受Joda-Time的启发,由JSR 310定义,并由ThreeTen-Extra项目扩展。
long epochSeconds = … ;
Instant instant = Instant.ofEpochSeconds( epochSeconds );
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant, zoneId);
Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );
String output = zdt.format( formatter );

首先,我们将使用UTC作为系统中的默认唯一时区。因为,在UTC中,时间永远不会回到过去或走向未来。夏时制没有时间偏移。因此,所有应用程序(我们开发的应用程序并为其用户提供时区支持)环境都需要一个JVM参数,它提供了一个基于UTC的环境。

时区JVM参数使用情况

-Duser.timezone=UTC

For Views

对于视图,日期/时间对象应该根据指定的时区呈现。对于Java世界,这是由formatDatejstl中处理的。每个项目本身都包含自己的时区保持逻辑。

用户。timeZone: for admin panels

一些fmt:formatDate示例

<fmt:formatDate value="${someDateTime}" timeZone="${user.timeZone}" pattern="MMM dd, yyyy - HH:mm:ss.S"/>

有关formatDate标签库的更多信息,请查看链接或谷歌。

For Forms(从用户获取日期/时间数据)

当您通过表单获取日期信息时,需要考虑时区并执行时间转换。转换方向为"用户时区到UTC"。数据库中的时间应该在UTC时区。

座右铭是全局保存;在本地显示:)

编辑:

将timezone作为User对象的子字段,并在想要显示时间时将其设置为格式化程序,您可以在JavaSE中使用它。

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm");
        formatter.setTimeZone(TimeZone.getTimeZone(user.getTimeZone()));

相关内容

  • 没有找到相关文章