簡體   English   中英

為包含00:00:00的字符串添加小時數

[英]Adding hours to a String containing 00:00:00

我將把dateTime變量發送到一個API,該API需要一個包含時間和日期的String。 但是我注意到存在時間差異,因為當我發送該變量時,最終會增加兩個小時。 所以我需要在時間變量上加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”。

為此,請使用OffsetDateTimeZoneOffset.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點。 同一時刻,時間軸上的同一點,不同的掛鍾時間。

您可以通過對可疑時區應用ZoneId來驗證這一點,以查看生成的ZonedDateTime對象中的掛鍾時間值。

ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;  // Same moment, same point on the timeline, different wall-click time. 

此方法可能會為您提供有用的提示。 輸出為: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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM