Java中的新日期混淆
我将java jsp页面中的新日期用作:Java中的新日期混淆,java,Java,我将java jsp页面中的新日期用作: <jsp:useBean id="today" class="java.util.Date" scope="page"></jsp:useBean> 今天使用它来检索在“这个日期”执行的执行 我在这里很困惑,这个新的日期是应用服务器的日期还是客户端的日期(印度的系统时间) 由于app server位于美国(GMT),而客户端位于印度(IST),因此,由于这种差异,我们面临的问题是,由于时差,执行值无法显示在UI上 所以,如何
<jsp:useBean id="today" class="java.util.Date" scope="page"></jsp:useBean>
今天使用它来检索在“这个日期”执行的执行
我在这里很困惑,这个新的日期是应用服务器的日期还是客户端的日期(印度的系统时间)
由于app server位于美国(GMT),而客户端位于印度(IST),因此,由于这种差异,我们面临的问题是,由于时差,执行值无法显示在UI上
所以,如何解决这个问题,请分享您的想法当然,当JSP在服务器中呈现时,这需要服务器时间。如果您想使用客户机日期,那么您可以使用在客户机端运行的java脚本当JSP在服务器中呈现时,肯定需要服务器时间。如果要使用客户端日期,则可以使用在客户端运行的java脚本java.util.Date不包含时区信息。查看如何在页面中显示日期值。java.util.Date不包含有关时区的信息。查看您如何在页面中显示日期值。应该接受。JSP页面实际上是在服务器端编译的,它们的Java代码是在服务器端执行的。我将添加更多信息
日期
是UTC
java.util.Date
以UTC为单位。它的toString
方法在生成字符串时会混淆地应用JVM的当前默认时区。这会在日期中产生时区的错觉
避免遗留日期时间类
您应该避免麻烦的旧类,java.util.Date
,它现在是遗留类,被java.time类取代
使用java.time
要捕获UTC中的当前时刻,请使用Instant
类
Instant instant = Instant.now();
要通过某个地区的镜头查看这一时刻,请应用时区aZoneId
,以获得zoneDateTime
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或GMT
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)
作为快捷方式,通过调用其now
方法并传递所需时区,直接转到ZoneDateTime
ZonedDateTime zdt = ZonedDateTime.now( z );
永远不要依赖JVM的当前默认时区。JVM中任何应用程序的任何线程中的任何代码的任何调用都可能随时改变它。相反,通过传递任何选项时区参数来显式指定所需/预期的时区
您可以进一步调整到其他时区
ZonedDateDate zdtLosAngeles = instant.atZone( ZoneId.of( "America/Los_Angeles" ) );
ZonedDateDate zdtParis = instant.atZone( ZoneId.of( "Europe/Paris" ) );
ZonedDateDate zdtKolkata = instant.atZone( ZoneId.of( "Asia/Kolkata" ) );
ZonedDateDate zdtAuckland = instant.atZone( ZoneId.of( "Pacific/Auckland" ) );
上面代码中的所有四个ZoneDateTime
对象都代表了非常相同的时刻,时间线上非常相同的点。他们每个人都有一个不同的挂钟时间,就像四个人在一个世界范围的电话会议上同时看着墙上的一个钟
在UTC工作
如有疑问,请在UTC工作。您的大多数业务逻辑、数据存储和数据交换都应使用UTC。别再想你自己的时区了。将UTC视为“一个真实时间”。所有其他分区时间仅是UTC主题的变化
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&
该项目现已启动,建议迁移到类
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是
从哪里获得java.time类
- 后来
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 该项目专门为Android采用了ThreeTen Backport(如上所述)
- 看
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,例如、、和。应该接受。JSP页面实际上是在服务器端编译的,它们的Java代码是在服务器端执行的。我将添加更多信息
日期
是UTC
java.util.Date
以UTC为单位。它的toString
方法在生成字符串时会混淆地应用JVM的当前默认时区。这会在日期中产生时区的错觉
避免遗留日期时间类
您应该避免麻烦的旧类,java.util.Date
,它现在是遗留类,被java.time类取代
使用java.time
要捕获UTC中的当前时刻,请使用Instant
类
Instant instant = Instant.now();
要通过某个地区的镜头查看这一时刻,请应用时区aZoneId
,以获得zoneDateTime
以大陆/地区
的格式指定,例如,或太平洋/奥克兰
。切勿使用3-4个字母的缩写,如EST
或GMT
或IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)
作为快捷方式,通过调用其now
方法并传递所需时区,直接转到ZoneDateTime
ZonedDateTime zdt = ZonedDateTime.now( z );
永远不要依赖JVM的当前默认时区。JVM中任何应用程序的任何线程中的任何代码的任何调用都可能随时改变它。相反,通过传递任何选项时区参数来显式指定所需/预期的时区
您可以进一步调整到其他时区
ZonedDateDate zdtLosAngeles = instant.atZone( ZoneId.of( "America/Los_Angeles" ) );
ZonedDateDate zdtParis = instant.atZone( ZoneId.of( "Europe/Paris" ) );
ZonedDateDate zdtKolkata = instant.atZone( ZoneId.of( "Asia/Kolkata" ) );
ZonedDateDate zdtAuckland = instant.atZone( ZoneId.of( "Pacific/Auckland" ) );
上面代码中的所有四个ZoneDateTime
对象都代表了非常相同的时刻,时间线上非常相同的点。他们每个人都有不同的挂钟时间,好像有四个