当前位置: 首页 > 知识库问答 >
问题:

从请求中获取zoneID,以将请求日期和时间转换为Java8中的UTC格式

梁浩涆
2023-03-14

为了进行转换,我有下面的代码,它将给定的zoneId转换为UTC格式

public ZonedDateTime convertDateBetweenTimeZones(LocalDateTime sourceDateTime,String sourceZone,String targetZone){
     return sourceDateTime.atZone( ZoneId.of(sourceZone)).withZoneSameInstant( ZoneId.of(targetZone));
    }

我按如下方式调用上述方法,

 ZonedDateTime zonedDateTime=convertDateBetweenTimeZones(LocalDateTime.now(),"Asia/Calcutta","UTC");

一旦我可以获得一个zonedDateTime对象,我想我可以将数据库传递给它并相应地查询它。

JavaUser

共有1个答案

严稳
2023-03-14

你每件事都做得很好,但有三件事。

服务器的时区设置应该与您的编码无关。服务器设置可以随时更改,因此不能依赖于此。

始终将可选的时区对象传递给所有相关的java.time方法,以指定您期望/希望的任何时区。

您可以明智地使用正确的IANA“TZ”时区名称,其格式为大陆/地区例如美洲/蒙特利尔。不要使用3-4个字母的缩写,如ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

对于数据库交换,您可能需要通过toinstant方法从ZonedDateTime提取instant。大多数严肃的数据库都以UTC形式存储日期-时间。instant类以UTC表示时间线上的一个时刻,分辨率为纳秒。

遵循JDBC4.2或更高版本的JDBC驱动程序可能通过ResultSet::GetObjectPrepatedStatement::SetObject直接使用Instant。如果没有,则返回到简单地转换为java.sql类型,如java.sql.timestamp

仔细研究数据库的日期-时间处理行为;不同的数据库在此(!)上差异很大。SQL规范很少提到日期-时间处理过去的主题,模糊地无视几天类型。有些像Postgres有很好的日期时间支持,而其他的支持很差,所有的行为都不同。

至于从web浏览器中确定时区,这并不简单。搜索堆栈溢出的更多信息与许多问题和答案已经张贴。

最终,唯一确定的方法是询问用户。在从用户收集数据时包括时区字段。

 类似资料:
  • 我想把这个2021年1月20日20:10:14转换成yyyy-MM-dd'T'HH:MM:ss格式。Android系统中的SSS'Z'。目前我正在使用函数,但当我转换为本地格式时,我没有得到原始时间

  • 问题内容: 我需要一种简便的方法,可以在不使用任何库的情况下将日期时间戳转换为UTC(从服务器所在的任何时区)。 问题答案: 尝试getTimezone和setTimezone,请参见示例 (但这确实使用了一个类) 更新: 没有任何类,您可以尝试这样的事情: 注意:您可能还需要将时区设置回原始

  • 我有一个方法可以生成一个随机的日期和时间。 打印输出类似于 我见过几个这样的问题和页面,但他们没有给我一个线索。

  • 我有一个post请求,可以很好地与postman配合使用,我尝试将其转换为cUrl请求,以便通过提示命令或导入postman来使用它。 如果“KEY”字段为空,它将不起作用。 以下是我尝试的:

  • 问题内容: 我有以下CURL请求,谁能请我确认subesquest HTTP请求是什么? 会是这样吗? 任何人都可以帮助我将上述curl请求完全转换为httpreq。 提前致谢。 苏维 问题答案: 有很多方法可以实现这一目标。在我看来,以下一项是最简单的,同意它不是很灵活,但是可以工作。