SORU
17 EKİM 2013, PERŞEMBE


Java dönüştürme arasında.zaman.LocalDateTime ve java.açıklama.Tarih

Java 8 tarih ve saat için tamamen yeni bir API vardır. Bu API en yararlı olan sınıflardan biri LocalDateTime holding için saat dilimi-bağımsız tarih ile zaman değer.

Muhtemelen kod bu amaç için 5 ** eski sınıfını kullanarak satırları milyonlarca vardır. Eski ve yeni kod deki zaman gibi, ikisi arasında dönüştürmek için bir ihtiyaç olacaktır. Doğrudan yöntemler olarak bunu gerçekleştirmek için var gibi yok gibi, nasıl yapılabilir?

CEVAP
27 Mayıs 2014, Salı


Kısa cevap:

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());

Açıklama: (LocalDate this question bağlı olarak)

İsmine rağmen java.util.Date zaman çizgisi, bir değil, bir anlık temsil eder "tarih". Gerçek veri nesnesi içerisinde saklanan 1970-01-01T00:00 z beri milisaniye long sayısı (1970 GMT/UTC başında gece yarısı).

Genel amaçlı-310 java.util.Date eşdeğer sınıf Instant ve fro: dönüşüm sağlamak için uygun bir yöntem vardır böylece

Date input = new Date();
Instant instant = input.toInstant();
Date output = Date.from(instant);

* *13 örnek bir zaman dilimi kavramı yok. Bu ise toString bir zaman dilimine göredir çünkü ** 15 toString() ararsan garip görünebilir. Ancak bu yöntem gerçekten hızlı Java varsayılan zaman dilimi dize sağlamak için kullanır. Zaman dilimi java.util.Date fiili durumu, bir parçası değildir.

Instant Bir de bu zaman dilimi ile ilgili herhangi bir bilgi içermiyor. Böylece, bir yerel Instant dönüştürmek için tarih-saat belirtmek için gerekli bir zaman dilimi. Bu varsayılan bölge olabilir- ZoneId.systemDefault() - ya uygulama kontrol eden zaman dilimi, kullanıcı tercihleri zaman dilimi gibi olabilir. LocalDateTime anlık ve zaman dilimi her zaman uygun fabrika yöntemi vardır:

Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());

Tersine, LocalDateTime saat dilimi atZone(ZoneId) yöntemini çağırarak belirtildi. ZonedDateTime doğrudan Instant: bir dönüştürülebilir

LocalDateTime ldt = ...
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date output = Date.from(zdt.toInstant());

ZonedDateTime LocalDateTime dönüştürme beklenmeyen davranış tanıtmak için bir potansiyele sahiptir unutmayın. Bu tarih-saat, gün Işığından yararlanma Saati kaynaklanıyor her yerel olduğundan değil. Sonbahar/güz, aynı yerel tarih-saat iki kez oluştuğu yerel örtüşme zaman sınırı yoktur. İlkbaharda, bir saat içinde kaybolur, bir boşluk var. Dönüşüm yapacağız daha ne tanımı atZone(ZoneId) Javadoc bakın.

Eğer gezi turu özet, bir java.util.Date LocalDateTime java.util.Date tekrar farklı bir anlık Işığından nedeniyle sona erebilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Lupe Fiasco

    Lupe Fiasco

    23 ŞUBAT 2006
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009
  • sknbp

    sknbp

    16 Kasım 2006