将小时数添加到包含00:00:00的字符串中

时间:2019-05-09 19:46:48

标签: java string date converters

我将把dateTime变量发送到需要一个带有时间和日期的字符串的API。但是我注意到这之间存在时差,因为当我发送该变量时,它最终增加了两个小时。因此,我需要将2小时添加到时间变量中。

我尝试拆分时间变量,将第一个元素解析为int并添加2,然后格式化为String等,但这似乎不必要地太长。有没有更简单的方法?我试图弄清楚如何使用时间对象并设置日期和时间,但是我只知道如何设置为当前时间,而我不想这样做。下面的代码包含所需的值。

String date = "2019-05-09";
String time = "10:00:00";
String dateTime = (date + "T" + time + "Z");

2 个答案:

答案 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));
}