我在java jsp页面中使用新日期:
<jsp:useBean id="today" class="java.util.Date" scope="page"></jsp:useBean>
今天使用此功能检索在此日期执行的执行情况&#39;。
我在这里感到困惑,这个新日期是否需要app服务器或客户端(印度的系统时间)日期。
由于app服务器位于USA (GMT)
且客户端位于India (IST)
,因此由于存在这种差异,我们面临的问题是由于时差而未在UI上显示执行值。
那么如何解决这个问题,请分享您的想法
答案 0 :(得分:3)
当服务器中呈现JSP时,肯定需要服务器时间。如果要使用客户端日期,则可以使用在客户端运行的java脚本
答案 1 :(得分:1)
java.util.Date不包含有关时区的信息。看看如何在页面中显示日期值。
答案 2 :(得分:0)
应接受correct Answer by Anoop LL。 JSP页面确实是在服务器端编译的,它们的Java代码是在服务器端执行的。我将添加更多信息。
Date
是UTC java.util.Date
是UTC。其toString
方法在生成字符串时会混淆地应用JVM的当前默认时区。这会在Date
中创建时区的错觉。
你应该避免使用java.time类取代的麻烦的旧类java.util.Date
,现在是遗留的。
要以UTC格式捕获当前时刻,请使用Instant
类。
Instant instant = Instant.now();
要通过某个地区wall-clock time的镜头观看此时刻,请应用时区ZoneId
,以获得ZonedDateTime
。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或GMT
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
作为一种快捷方式,请直接转至ZonedDateTime
方法并调用其now
方法并传递所需的时区。
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" ) );
上面代码中的所有四个ZonedDateTime
对象代表了相同的时刻,即时间轴上的相同点。它们每个都有不同的挂钟时间,好像四个人在世界范围的电话会议上同时抬头看着墙上的时钟。
如有疑问,请使用UTC。您的大多数业务逻辑,数据存储和数据交换都应采用UTC格式。不要再想你自己当地的时区了。将UTC视为“同一时间”。所有其他分区时间仅仅是UTC主题的变化。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。