我将把dateTime变量发送到需要一个带有时间和日期的字符串的API。但是我注意到这之间存在时差,因为当我发送该变量时,它最终增加了两个小时。因此,我需要将2小时添加到时间变量中。
我尝试拆分时间变量,将第一个元素解析为int并添加2,然后格式化为String等,但这似乎不必要地太长。有没有更简单的方法?我试图弄清楚如何使用时间对象并设置日期和时间,但是我只知道如何设置为当前时间,而我不想这样做。下面的代码包含所需的值。
String date = "2019-05-09";
String time = "10:00:00";
String dateTime = (date + "T" + time + "Z");
答案 0 :(得分:1)
有没有更简单的方法?
是的,请使用现代的 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() ;
您没有确切说明这两个小时的差异出现的方式或位置。我猜想在将UTC调整为某个时区后,您会看到结果。如果是这样,您没问题。
如果两个人在相隔两个小时的时区打电话,如果他们同时抬头从各自墙上的时钟上读取当前时间,则一个人会看到10 AM,而另一个人会看到中午12点。同一时刻,时间轴上的同一点,不同的时钟时间。
您可以通过对可疑时区应用ZoneId
来验证这一点,以查看生成的ZonedDateTime
对象中的挂钟时间值。
ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ; // Same moment, same point on the timeline, different wall-click time.
答案 1 :(得分:-1)
此方法可能为您提供有用的提示。输出是:2019-05-09 16:05
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.now().plusHours(2);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
System.out.println(localDateTime.format(formatter));
}