[英]Unable Convert UTC into Local Time on Android
我在 UTC 中有一個日期 '2022-04-09 11:16:32' 我想將它轉換為 IST 它應該是我正在使用的代碼中的 '2022-04-09 04:46:32'
String date = dataItem.getTime().replaceAll("-","/");
try {
DateFormat utcFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date d = utcFormat.parse(date);
DateFormat pstFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
pstFormat.setTimeZone(TimeZone.getTimeZone("IST"));
holder.date.setText(pstFormat.format(d));
} catch (ParseException e) {
e.printStackTrace();
}
但它打印 2022/04/09 10:16:32 這不是實際時間。 請幫我。
LocalDateTime
.parse(
"2022-04-09 11:16:32"
.replace( " " , "T" )
)
.atOffset(
ZoneOffset.UTC
)
.atZoneSameInstant(
ZoneId.of( "Asia/Kolkata" )
)
.format(
DateTimeFormatter.ISO_LOCAL_DATE_TIME
)
.replace( "T" , " " )
請參閱在 IdeOne.com 上實時運行的代碼。
2022-04-09 16:46:32
在更改字符串以符合 ISO 8601 標准后,切勿使用可怕的遺留日期時間類,例如Date
。
LocalDateTime
將您的輸入解析為LocalDateTime
。
String input = "2022-04-09 11:16:32".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;
OffsetDateTime
顯然,您確定提供的帶時間日期字符串是 UTC 中的一個時刻,具有零小時-分鍾-秒的偏移量。
因此,應用零偏移量(定義為常量)來生成OffsetDateTime
object。
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
ZonedDateTime
接下來您要從 UTC 調整到特定時區。 應用ZoneId
以獲得ZonedDateTime
。 結果表示同一時刻,時間軸上的同一點,但日期和時間與該時區中的日期和時間相同。
沒有像IST
這樣的時區。 也不是CST
、 PDT
等。這些 2-4 個字符的偽區域不是實時區域。 它們不是標准化的,甚至不是唯一的,這些僅適用於向用戶展示。 絕不用於數據交換或數據存儲。 實時時區的名稱格式為Continent/Region
。
對於IST
,您可能指的是Europe/Dublin
或Asia/Kolkata
。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
要生成所需的文本,請使用DateTimeFormatter
定義您自己的自定義格式設置模式。 或者使用 ISO 8601 的預定義格式化程序,並刪除T
。
String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " ) ;
似乎“IST”不在可用的時區 ID 中,您可以使用以下方法檢查列表:TimeZone.getAvailableIDs()。 您可以嘗試使用“亞洲/加爾各答”。
pstFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.