亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在特定日期設置時區?

如何在特定日期設置時區?

慕雪6442864 2023-06-21 15:03:57
我有一個問題,我嘗試了所有方法(包括在線 stackoverflow 線程),但無法在特定日期按預期設置時區。這是我的代碼:Date until = DateTimeUtils.getNewBookUntilDate();//which returns : Wed Aug 28 11:00:02 EDT 2019 SimpleDateFormat isoFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");            isoFormat.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles");try {    until = isoFormat.parse(until.toString());} catch (ParseException e) {     e.printStackTrace();}但我仍然得到: Wed Aug 28 11:00:02 EDT 2019 ,而不是 Wed Aug 28 8:00:02 PDT 2019知道該怎么做嗎?
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

避免java.util.Date

Ajava.util.Date代表 UTC 中的某個時刻。無需將其作為文本進行操作。注意:該方法Date::toString說謊了,在生成文本時動態應用 JVM 當前的默認時區。

相反,使用java.time.Instant

首先從那個可怕的遺留類轉換為它的現代替代品,java.time.Instant.?注意添加到舊類的新轉換方法。

Instant?instant?=?myDate.toInstant()?;

ZonedDateTime

AnInstant也是 UTC 中的時刻。要通過某個地區的人們使用的距 UTC 的偏移量查看同一時刻,請應用 aZoneId來獲取ZonedDateTime對象。

ZoneId?z?=?ZoneId.of(?"America/Montreal"?)?;
ZonedDateTime?zdt?=?instant.atZone(?z?)?;

請明確:這個zdt對象和這個instant對象都代表同一時刻,時間軸上的同一點。它們僅在掛鐘時間上有所不同。想象一下,冰島的某人(始終采用 UTC)給魁北克的某人打電話,他們都抬頭看著各自墻上的時鐘。

從現代到傳統

如果您ZonedDateTime手頭有一個對象,并且必須獲得一個java.util.Date用于與尚未更新到java.time的舊代碼進行互操作的對象,則可以進行轉換。通過從對象中提取 aInstant來從 an 轉到 a?。DateInstantZonedDateTime

Instant?instant?=?zdt.toInstant()?;
java.util.Date?date?=?java.util.Date.from?(?instant?)?;

如果您需要 aCalendar而不是Date,則轉換更直接。

Calendar?cal?=?GregorianCalendar.from(?zdt?)?;


查看完整回答
反對 回復 2023-06-21
  • 1 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號