tl; dr
Diğer Cevaplar Java 8'den itibaren modası geçmiş durumda.
Instant
.parse( "2013-09-29T18:46:19Z" )
.atZone(
ZoneId.of( "Asia/Kolkata" )
)
ISO 8601
Dize biçiminiz ISO 8601 standardına uygun. Bu standart, çeşitli tarih-saat değerlerini metin olarak göstermek için mantıklı formatlar tanımlar.
java.time
Eski java.util.Date
/ .Calendar
ve java.text.SimpleDateFormat
sınıfların yerini Java 8 ve sonraki sürümlerde yerleşik olan java.time çerçevesi almıştır. Öğreticiye bakın . Kötü tasarlanmış, kafa karıştırıcı ve zahmetli oldukları kanıtlanan eski sınıflardan kaçının .
Eski sınıflardaki zayıf tasarımın bir kısmı sizi ısırdı, burada toString
yöntem, gerçekte UTC (GMT) cinsinden olan tarih-saat değerinin bir metin gösterimini oluştururken JVM'nin geçerli varsayılan saat dilimini uygular; iyi niyetli ama kafa karıştırıcı.
Java.time sınıfları, tarih-saat değerlerinin metinsel temsillerini ayrıştırırken / üretirken varsayılan olarak ISO 8601 biçimlerini kullanır. Bu nedenle, bir ayrıştırma kalıbı belirlemenize gerek yoktur.
An Instant
, UTC'de zaman çizelgesindeki bir andır .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Bir nesneyi üretmek için gerektiği kadar zaman dilimi uygulayabilirsiniz ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );