java - 将小时数添加到包含 00:00:00 的字符串
问题描述
我要将 dateTime 变量发送到一个 API,该 API 需要一个包含时间和日期的字符串。但我注意到存在时间差,因为当我发送该变量时,它最终会增加两个小时。所以我需要在时间变量中增加 2 小时。
我尝试拆分时间变量,将第一个元素解析为 int 并添加 2,然后格式化为 String 等等,但这似乎非常不必要。有没有更简单的方法?我试图弄清楚如何使用时间对象并设置日期和时间,但我只知道如何设置为当前时间,我不想这样做。下面的代码包含所需的值。
String date = "2019-05-09";
String time = "10:00:00";
String dateTime = (date + "T" + time + "Z");
解决方案
有没有更简单的方法?
是的,使用现代java.time类。
显然,您正试图在 UTC 日期的上午 10 点进行交流。在Z
您的示例代码中表示 UTC,发音为“Zulu”。
为此,请使用OffsetDateTime
由ZoneOffset.UTC
常量指定的偏移量。
LocalDate ld = LocalDate.parse( "2019-05-09" ) ;
LocalTime lt = LocalTime.parse( "10:00:00" ) ;
OffsetDateTime odt = OffsetDateTime.of( ld , lt , ZoneOffset.UTC ) ;
显然,您希望将此值作为标准ISO 8601格式的字符串发送。在解析/生成字符串时,这些格式默认在java.time类中使用。
String output = odt.toString() ;
您没有准确解释这 2 小时差异出现的方式或位置。我猜想您在从 UTC 调整到某个时区后会看到结果。如果是这样,你没有问题。
如果两个人在相隔两个小时的时区打电话,如果他们同时抬头从各自墙上的时钟上读取当前时间,一个人会看到上午 10 点,而另一个人看到中午 12 点。同一时刻,时间轴上的同一点,不同的挂钟时间。
您可以通过为可疑时区应用 a 来验证这一点,以查看结果对象 ZoneId
中的挂钟时间值。ZonedDateTime
ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ; // Same moment, same point on the timeline, different wall-click time.
推荐阅读
- node.js - 在 findById 方法中处理 404 状态
- javascript - 使用 document.getElementById 引用多个(不同的)Div Id
- selenium - 如何在 jvm-parallel 插件中配置执行步骤?当我们想要并行运行场景时
- typescript - 通过外部函数缩小 TypeScript 类型?
- oracle - Oracle 数据库 JDBC 驱动程序无法从 Spark 读取钱包文件
- reporting-services - 是否可以自定义 Visual Studio 2017 SSRS rptproj MSBuild 文件?
- node.js - 我可以在 express (nodeJs) 中有多个路由文件吗
- python - Python + bash 提示:如何打印宽度计算包装器?
- python - Python2.7套接字错误37“操作已经在进行中”
- javascript - Amplify.service.api.get 返回 sampleCloudAPI 不存在