[英]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”。
為此,請使用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點。 同一時刻,時間軸上的同一點,不同的掛鍾時間。
您可以通過對可疑時區應用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.