12 Ocak 2020 Pazar

Instant Sınıfı

Giriş
Şu satırı dahil ederiz.
import java.time.Instant;
Açıklaması şöyle
The Instant class is always in UTC by definition.
Açıklaması şöyle
The Instant class is a basic building-block class, indicating a moment on the timeline in UTC. Usually when performing manipulations such as adding hours, you’ll likely want to account for anomalies such as Daylight Saving Time, and so you will care about time zone. For that, use the ZonedDateTime class.
Bu sınıf UTC zaman çizgisindeki bir noktayı temsil eder. Eski Date ve Calendar sınıfları milisaniye seviyesinde çözünürlük sağlarken bu sınıf nanosaniye seviyesinde çözünürlük sağlayabilir.

Instant yerine UTC zaman dilimini kullanan ZonedDateTime da kullanılabilir. Şöyle yaparız.
ZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.UTC);
atZone metodu
Instant Nesnesinden ZonedDateTime Nesnesine Çevrim yazısına taşıdım

getEpochSecond metodu
Açıklaması şöyle. Yani getEpochSecond () + getNano() epoch'tan beri geçen tüm süreyi ifade eder.
The range of an instant requires the storage of a number larger than a long. To achieve this, the class stores a long representing epoch-seconds and an int representing nanosecond-of-second, which will always be between 0 and 999,999,999.
Şöyle yaparız.
long unixTimestamp = Instant.now().getEpochSecond();
getNano metodu
Örnek ver

isBefore metodu
Örnek
Şöyle yaparız.
Instant now = Instant.parse("2018-06-21T08:40:00.00Z");
Instant then = now.minus(9, ChronoUnit.HOURS);

if (then.isBefore(now)) {
  ...
}
minus metodu
Örnek
Şöyle yaparız.
// two weeks ago
long pastTimestamp = Instant.now().minus(14, ChronoUnit.DAYS).getEpochSecond();
Örnek
Şöyle yaparız.
Instant now = Instant.parse("2018-06-21T08:40:00.00Z");
Instant then = now.minus(9, ChronoUnit.HOURS);
now metodu
Şöyle yaparız.
Instant now = Instant.now();
Veritabanına UTC saati yazmak için şöyle yaparız.
myPreparedStatement.setObject(  , Instant.now() ) ;
now metodu - Clock
Şöyle yaparız.
Instant now = Instant.now ( Clock.systemUTC () );
Instant now = Instant.now ( Clock.system ( ZoneId.of ( "America/Montreal" ) ) );
Instant now = Instant.now ( Clock.systemDefaultZone () );
Hepsi aynı sonucu verir.
instantClockSystemUTC.toString(): 2016-12-31T20:52:39.763Z
instantClockSystem.toString(): 2016-12-31T20:52:39.763Z
instantClockSystemDefaultZone.toString(): 2016-12-31T20:52:39.763Z
ofEpochSecond metodu - saniye
Belirtilen saniyeden bir Instant nesnesi oluşturur.
Örnek
Şöyle yaparız.
Instant instant = Instant.ofEpochSecond( 1220227200L);
Örnek
Şöyle yaparız
System.out.println(Instant.ofEpochSecond(1512431637067L));
// far future: +49897-01-18T19:11:07Z
ofEpochSecond metodu - saniye + nanosaniye
Örnek
Mikrosaniyeden yaratmak için şöyle yaparız.
Instant.ofEpochSecond(TimeUnit.MICROSECONDS.toSeconds(microseconds),    
    TimeUnit.MICROSECONDS.toNanos(microseconds)        
    - 
    TimeUnit.SECONDS.toNanos(TimeUnit.MICROSECONDS.toSeconds(microseconds)
 
)              
ofEpochMili metodu
Belirtilen milisaniyeden bir Instant nesnesi oluşturur. Metodun içi şöyle.
public static Instant ofEpochMilli(long epochMilli) {
  long secs = Math.floorDiv(epochMilli, 1000);
  int mos = (int)Math.floorMod(epochMilli, 1000);
  return create(secs, mos * 1000_000);
}
Örnek
Şöyle yaparız.
System.out.println(Instant.ofEpochMilli(1512431637067L));
// output: 2017-12-04T23:53:57.067Z
parse metodu
Örnek
Şöyle bir string'i başarıyla çevirir.
2016-10-21T00:00:00Z
Örnek
Şöyle yaparız.
Instant now = Instant.parse("2018-06-21T08:40:00.00Z");
plus metodu
Bu sınıfın plusHours() diye bir metodu yok. Oracle örnekler yanlış. Şöyle yaparız.
Instant later = instant.plus( 1 , ChronoUnit.HOURS ) ;
toString metodu
Çıktı olarak Yıl+Ay+Gün+Saat+Dakika+Saniye(double) verir.
Örnek
Şöyle yaparız.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
Çıktı olarak şunu alırız.
2016-05-06T23:24:25.694Z
Örnek
Şöyle yaparız.
System.out.println(Instant.ofEpochMilli(1512431637067L));
// output: 2017-12-04T23:53:57.067Z
truncatedTo metodu
Örnek
Şöyle yaparız.
import static java.time.temporal.ChronoUnit.DAYS;

final Map<Instant, List<Entry>> entries =
    list.stream().collect(Collectors.groupingBy(request -> 
        request.getDate().toInstant().truncatedTo(DAYS)));
Çıktı olarak şunu alırız.
2011-03-21
    VALUE1
2011-03-21
    VALUE2
2011-03-22
    VALUE3
    VALUE4
2011-03-21
    VALUE5
Örnek
Şöyle yaparız.
Instant start = ...;
Instant target = ...;

if (!target.truncatedTo(ChronoUnit.DAYS).equals(start.truncatedTo(ChronoUnit.DAYS))) {
  ...
}

Hiç yorum yok:

Yorum Gönder