20 Eylül 2017 Çarşamba

Timestamp Sınıfı

Giriş
Bu sınıf java.sql.Timestamp isim alanında. Java 8'den itibaren bu sınıf yerine Instant.now() kullanılırsa daha iyi.

Timestamp sınıfı saat dilimi bilgisinden mahrumdur. Zamanı "yyyy-mm-dd hh:mm:ss" formatında kaydeder.

Kalıtım
Şöyledir
Zaman Dilimi
Saat dilimine göre karışıklıklardan korunmak için şu adımları izleriz.

1. Veritabanında saatler her zaman UTC olarak saklanır.
2. ResultSet sınıfının getTimeStamp() metodu ile saat okunur. PreparedStatement sınıfının setTimeStamp() metodu ile saat kaydedilir.
3. TimeStamp toInstant() metodu ile Instant nesnesine dönüştürülür.
4. Instant nesnesi ZonedDateTime ile kullanıcıya gösterilmek üzere saat dilimine göre değiştirilir.

Sütun Tipi
Oracle'da DATE sütun tipi kullanılabilir.

constructor
Şöyle yaparız
ps = conn.prepareStatement('insert into your_table (date_col, ...) values (?, ...)');
ps.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));
cosntructor - Deprecated
year, month,date ... şeklindeki constructor kullanılmıyor. Onun yerine şöyle yaparız
Timestamp timestamp = Timestamp.valueOf("2012-01-12 12:45:56");
//Timestamp timestamp = new Timestamp(3912, 2, 12, 12, 45, 56, 0);
toLocalDateTime metodu
Şöyle yaparız.
Timestamp ts = ...;
LocalDateTime ldt = ts.toLocalDateTime();
toInstant metodu
Nesneyi Java 8 ile çalışabilmek için Instant'a dönüştürür.

toString metodu
timestamp.toString() yapınca yerel saati alırız. Aşağıdaki kodu çalıştırınca
Instant inst = LocalDate.now();
Timestamp ts = Timestamp.from(inst);
System.out.println(ts);
Çıktı olararak yerel saati alırız.
2015-10-19 11:00:00.0
Eğer TimeStamp içindeki Epoch'tan beri geçen süreyi almak istersek şöyle yaparız.
System.out.println(ts.getTime());
Bu sefer çıktı olarak sayı alırız.
1445212800000
Anladığım kadarıyla bazı veritabanlarında bulunan sütun tiplerindeki saat dilimi bilgisi başka şekillerde elde ediliyor.

valueOf metodu - LocalDateTime
Instant nesnesini Timestamp nesnesine çevirir. Şöyle yaparız.
Timestamp ts = Timestamp.valueOf (instant);
Şöyle yaparız.
LocalDateTime locDateTime = ...;
Timestamp ts =  Timestamp.valueOf(locDateTime));

Hiç yorum yok:

Yorum Gönder