tl; Dr.
Instant.ofEpochMilli( 1_322_018_752_992L ) // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.
ayrıntılar
Diğer cevaplar modası geçmiş veya yanlış sınıflar kullanır.
Java.util.Date/.Calendar gibi eski tarih-saat sınıflarından kaçının. Kötü tasarlanmış, kafa karıştırıcı ve zahmetli olduklarını kanıtladılar.
java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşik olarak geliyor. İşlevlerin çoğu Java 6 ve 7'ye desteklenir ve Android'e uyarlanır . Joda-Time ile aynı milletten bazıları tarafından yapıldı .
Bir Instant
de zaman çizelgesi üzerinde bir andır UTC çözünürlüğe sahip nanosaniye . Onun dönemi UTC'de 1970'in ilk anıdır.
Giriş verilerinizin 1970-01-01T00: 00: 00Z'den (Soruda net değil) milisaniye sayısı olduğunu varsayarsak, kolayca anlayabiliriz Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
instant.toString (): 2011-11-23T03: 25: 52.992Z
Bu Z
standart ISO 8601 biçimlendirilmiş dize UTC'nin kısaltmasıdır Zulu
ve UTC anlamına gelir .
Bir kullanarak bir zaman dilimini uygula uygun bir zaman dilimi adını bir olsun, ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
IdeOne.com'da canlı olarak çalışan bu koda bakın .
Asia/Kolkata
saat dilimi ?
Kodunuzu etkileyen bir Hindistan saat dilimi olduğunu tahmin ediyorum. Burada, Asia/Kolkata
saat dilimine ayarlamanın, rapor ettiğinizle aynı günün saatini oluşturduğunu görüyoruz 08:55
. Bu, UTC değerimizin beş buçuk saat ilerisindedir 03:25
.
2011-11-23T08: 55: 52,992 + 05: 30 [Asya / Kolkata]
Varsayılan bölge
JVM'nin geçerli varsayılan saat dilimini uygulayabilirsiniz . Varsayılan değerlerin çalışma sırasında herhangi bir anda değişebileceğini unutmayın . JVM içindeki herhangi bir uygulamanın herhangi bir iş parçacığındaki herhangi bir kod geçerli varsayılanı değiştirebilir. Önemliyse kullanıcıdan istenen / beklenen saat dilimini isteyin.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Hakkında java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date
, Calendar
& SimpleDateFormat
.
Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Özellikler JSR 310 .
JDBC 4.2 veya sonraki bir sürümle uyumlu bir JDBC sürücüsü ile java.time alışverişi yapabilirsiniz nesnelerini doğrudan veritabanınızla değiştirebilirsiniz. Dizelere veya java.sql. * Sınıflarına gerek yoktur.
Java.time sınıflarını nereden edinebilirsiniz?
- Java SE 8 , Java SE 9 ve üstü
- Dahili.
- Paketlenmiş bir uygulamaya sahip standart Java API'sinin bir parçasıdır.
- Java 9 bazı küçük özellikler ve düzeltmeler ekler.
- Java SE 6 ve Java SE 7
- Android
- Android'in sonraki sürümleri java.time sınıflarının uygulamalarını bir araya getirir.
- Daha önceki Android için, ThreeTenABP projesi ThreeTen-Backport'u uyarlar (yukarıda belirtilmiştir). Bkz . ThreeTenABP nasıl kullanılır… .
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .