javaee中的时区
我想在JavaEE项目中从后端向前端传递一些时间值(java.sql.Time)。出于某些历史原因,我通过调用方法getTime()将时间类型解析为long类型,这意味着我使用long类型在前端和后端之间进行通信。问题来了: 当我在前端得到long-type-time时,我必须使用js方法将long-type改回time:new-Date(long),但是从这个方法得到的值将与客户端的时区不同,这意味着不同时区的不同客户端将看到不同的结果。这绝对不是我想要的。所有客户端都应该看到相同的结果,等于后端的结果 解决此问题的两种方法:javaee中的时区,java,timezone,Java,Timezone,我想在JavaEE项目中从后端向前端传递一些时间值(java.sql.Time)。出于某些历史原因,我通过调用方法getTime()将时间类型解析为long类型,这意味着我使用long类型在前端和后端之间进行通信。问题来了: 当我在前端得到long-type-time时,我必须使用js方法将long-type改回time:new-Date(long),但是从这个方法得到的值将与客户端的时区不同,这意味着不同时区的不同客户端将看到不同的结果。这绝对不是我想要的。所有客户端都应该看到相同的结果,等于
有谁能告诉我解决这个问题的最佳方法吗 另一种方法是:
LocalTime lt = LocalTime.MIN.plus ( Duration.ofMilliseconds( milliseconds ) ) ;
java.time
您正在使用可怕的日期时间类,这些类在几年前被JSR310中定义的现代java.time类所取代
我想传递一些时间值(java.sql.Time)
该类型已被java.time.LocalTime
类取代
LocalTime lt = LocalTime.of( 15 , 0 ) ; // 3 PM.
我通过调用getTime()方法将时间类型解析为long类型,这意味着我使用long类型在前端和后端之间进行通信
这不是那么理想。通过使用标准格式的文本更好地传达日期时间值
在解析/生成字符串时,java.time类默认使用标准ISO 8601格式
String output = lt.toString() ;
……还有
LocalTime lt = LocalTime.parse( "15:00" ) ;
但如果我们必须继续进行这种毫秒数的破解,我们可以
表示一天中最早时间的时间跨度。对于LocalTime
类中表示的一般24小时工作日,这将是00:00:00。顺便说一句,在同一日期的某些时区,一天可能在一天中的另一个时间开始,例如01:00:00,但这与此无关
Duration d = Duration.between( LocalTime.MIN , lt ) ;
long milliseconds = d.toMillis() ;
并将毫秒数解析回持续时间
和本地时间
Duration d = Duration.ofMillis( milliseconds ) ;
LocalTime lt = LocalTime.MIN.plus( d ) ;
将前端和后端的时区更改为UTC时间
没必要。LocalTime
类和Duration
类都没有时区的概念,也没有UTC的偏移量。因此,分区/偏移不是问题
关于遗留类的问题,我可以提出很多观点。但真的没有理由麻烦。这些课程真是糟糕透了,应该干脆放弃。可能与FYI重复:项目现在正在进行中。它的创建者继续领导定义内置于Java8+中的类。看。@Basil同意,问题和答案已经7年了!您已经添加了最近的答案,太好了!!我的评论不是批评,而是给读者的注释。因此,我使用了“仅供参考”和“现在”这两个词。我很高兴你的回答在过去帮助过人们。
Duration d = Duration.ofMillis( milliseconds ) ;
LocalTime lt = LocalTime.MIN.plus( d ) ;