处理Java和Angular的时区差异



开发位于一个地方,部署在另一个位置进行Web application。在开发过程中,我使用自己的位置时区来获取并持续DB(Oracle)中的日期值。

但是部署后,到另一个位置时区完全不同,日期似乎在测试过程中引起了一个重大问题。

这是一个简单的应用程序,其中我将Java用于后端,而Angular 5用于前端。数据持续使用是使用Oracle DB完成的。

我不确定如何处理这个时区差异。是否有任何特定方法来处理这种差异?最欢迎任何输入。

[edit]:因此,要求很简单 - 无论用户在应用程序中登录何处,他都必须能够按照他的时区查看日期和时间。即使用户创建/修改项目,他也必须能够按照他的时区查看时间。

对于ex:,如果我要发布帖子/状态,那么我的时间必须显示我位置的时区。同样,如果我在另一个地理位置上看到相同的帖子/状态,那么我必须看到与该时区的时间。

与时区的任何东西都不有趣。我的建议是确保您将日期转换为服务器上的UTC并以这种方式持续使用,然后将它们转换回客户端。

我不知道您是如何将日期传递给服务器的,但是

之类的东西

从JSON字符串确定时区?可能有用。

有关更好的讨论,请参见:

发送/接收日期时服务器或客户端应处理时区?

如何与时区正确使用?

祝你好运!

编辑:

正如下面的乔恩·斯基特(Jon Skeet)所指出的那样,这不一定是一个好主意。没有时区的不带时区的UTC转换为"有损"。如果时区域变化(并且它们不时发生),那么您的UTC时间戳将不再代表原本打算的内容。

查看此页面并就数据类型做出一些决定(如果需要的话,Timestamp与时区将保留用户输入的时区)。

https://docs.oracle.com/cd/b19306_01/server.102/b14225/ch4datetime.htm

几乎您使用日期/时代的所有事情都将充满警告,并且这个问题并没有提供很多有关该应用程序对存储/显示日期和时间信息的要求的信息。

我猜你正在使用java日期对象吗?如果您使用的是Java 8,则应考虑这两个:

OffsetDateTime
ISO-8601日历系统中UTC/Greenwich偏移的日期时间,例如2007-12-03T10:15:30 01:00。

OffsetTime
ISO-8601日历系统中UTC/Greenwich偏移的时间,例如10:15:30 01:00。

https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html

如果您将其保存到Oracle,而您所需要的只是一个日期,那么我建议您将其保存为字符串,并使用" Yyyy-MM-DD"进行格式化。

默认情况下,Java JVM总是将本地JVM TZ(时区)值添加到任何日期对象。

所以让我们看一下业务案例。如果您在美国的4个不同地区有客户,并且需要在当地时间报告日期/时间事件,则必须在GMT时间内保存到DB。默认情况下,本地TZ将相应调整。Oracle的内置日期/时间对象默认情况下执行此操作,就像每个主要操作系统一样。因此,创建一个DIR,请注意当前时间,然后进入您的操作系统区域设置并更改时区。Dir Creation日期将自动翻译。

最简单的形式这是模型视图控制器的完美案例。TZ更改是控制器。该模型是GMT值,视图转化为当前用户的时区。

我希望这对您有帮助。请使用GMT,不要过度思考。在我的拙见中保存到不使用GMT的DB是要求麻烦的。

欢呼

相关内容

  • 没有找到相关文章

最新更新