tl; Dr.
Yalnızca modern java.time sınıflarını kullanın . Hiçbir zaman gibi korkunç mirası sınıflarını kullanmak SimpleDateFormat
, Date
ya da java.sql.Timestamp
.
ZonedDateTime // Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone).
.now( // Capture the current moment.
ZoneId.of( "Africa/Tunis" ) // Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST.
) // Returns a `ZonedDateTime` object.
.format( // Generate a `String` object containing text representing the value of our date-time object.
DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" )
) // Returns a `String`.
Veya JVM'nin geçerli varsayılan saat dilimini kullanın.
ZonedDateTime
.now( ZoneId.systemDefault() )
.format( DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ) )
java.time ve JDBC 4.2
Modern yaklaşım, yukarıda görüldüğü gibi java.time sınıflarını kullanır .
Senin Eğer JDBC sürücüsü ile uyumlu olduğu JDBC 4.2 , doğrudan alışverişi yapabilir java.time veritabanı ile nesneler. Kullanım PreparedStatement::setObject
ve ResultSet::getObject
.
Java.sql dosyasını yalnızca JDBC 4.2'den önceki sürücüler için kullanın
JDBC sürücünüz java.time türlerini desteklemek için henüz JDBC 4.2 ile uyumlu değilse , java.sql sınıflarını kullanmaya geri dönmeniz gerekir.
Veri depolama.
OffsetDateTime odt = OffsetDateTime.now( ZoneOffset.UTC ) ; // Capture the current moment in UTC.
myPreparedStatement.setObject( … , odt ) ;
Veri alınıyor.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Gibi java.sql türleri java.sql.Timestamp
sadece veritabanına giriş ve çıkış için kullanılmalıdır. Hemen Java 8 ve sonraki sürümlerde java.time türlerine dönüştürün.
java.time.Instant
A java.sql.Timestamp
bir eşleştiren java.time.Instant
, UTC zaman çizelgesi üzerinde bir an. toInstant
Eski sınıfa eklenen yeni dönüşüm yöntemine dikkat edin .
java.sql.Timestamp ts = myResultSet.getTimestamp( … );
Instant instant = ts.toInstant();
Saat dilimi
Almak için istenen / beklenen zaman dilimini ( ZoneId
) uygulayın ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Biçimlendirilmiş Dizeler
Dizenizi DateTimeFormatter
oluşturmak için a kullanın . Desen kodları, bunlara benzer, java.text.SimpleDateFormat
ancak tam olarak değil, bu yüzden dokümanı dikkatlice okuyun.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" );
String output = zdt.format( formatter );
Bu özel biçim, UTC'den veya saat dilimi farkı göstergesinden yoksun olduğu için tam anlamıyla belirsizdir .
ISO 8601
Bu konuda herhangi bir sözünüz varsa , kendinize göre yazmak yerine standart ISO 8601 formatlarını kullanmanızı öneririz . Standart biçim sizinkine oldukça benzer. Örneğin:
2016-02-20T03:26:32+05:30
.
Java.time sınıfları varsayılan olarak bu standart formatları kullanır, bu nedenle bir desen belirtmenize gerek yoktur. ZonedDateTime
Sınıf zaman bölgenin adını (akıllı bir gelişme) ekleyerek standart bir biçim uzanır.
String output = zdt.toString(); // Example: 2007-12-03T10:15:30+01:00[Europe/Paris]
Java.sql dosyasına dönüştür
Java.time biçiminden dönüştürebilirsiniz java.sql.Timestamp
. Bir Özü Instant
dan ZonedDateTime
.
Java.time sınıflarına / sınıflarından dönüştürmeyi kolaylaştırmak için eski sınıflara yeni yöntemler eklenmiştir.
java.sql.Timestamp ts = java.sql.Timestamp.from( zdt.toInstant() );
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. Spesifikasyon JSR 310'dur .
Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, sınıflara gerek yok .java.sql.*
Java.time sınıflarını nereden edinebilirsiniz?
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 .