Giriş
Bu sınıf tarih ve saati bilir. Diğer sınıflar ile ilişkisi şöyledir. Bu sınıf sistem saatinin çözünürlüğü kadar çözünürlük sağlar.
LocalDateTime Zaman Çizgisi ve TimeZone Bilmez
Zaman çizgisi üzerindeki bir noktayı temsil etmez. Kısaca no offset, no zone, not a moment denilebilir. Açıklaması şöyle.
O Zaman LocalDateTime Nedir ?
Açıklaması şöyle. Yani sadece bir string gibi düşünmek belki anlamayı daha kolaylaştırır.
Açıklaması şöyle. Aslında bunda şaşıracak bir şey yok. Java'daki bir çok sınıf artık Immutable
Eğer amacımız hem moment hem de time zone bilgisini saklamak ise ZonedDateTime sınıfını kullanmak gerekir.
LocalDateTime Nesnesini String'e Çevirme
1. format() metodu türevleri kullanılabilir. format metodu içine DateTimeFormatter alır.
Bu sınıf tarih ve saati bilir. Diğer sınıflar ile ilişkisi şöyledir. Bu sınıf sistem saatinin çözünürlüğü kadar çözünürlük sağlar.
LocalDateTime Zaman Çizgisi ve TimeZone Bilmez
Zaman çizgisi üzerindeki bir noktayı temsil etmez. Kısaca no offset, no zone, not a moment denilebilir. Açıklaması şöyle.
Şeklen şöyle.This class does not store or represent a time-zone. Instead, it is a description of the date, as used for birthdays, combined with the local time as seen on a wall clock. It cannot represent an instant on the time-line without additional information such as an offset or time-zone.
O Zaman LocalDateTime Nedir ?
Açıklaması şöyle. Yani sadece bir string gibi düşünmek belki anlamayı daha kolaylaştırır.
LocalDateTime Immutable'dırLocalDateTime is date-time without a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30
Açıklaması şöyle. Aslında bunda şaşıracak bir şey yok. Java'daki bir çok sınıf artık Immutable
LocalDateTime Moment Bilmiyorsa, Moment With TimeZone İçin Ne Kullanırız?LocalDateTime is an immutable date-time object that represents a date-time, often viewed as year-month-day-hour-minute-second. Other date and time fields, such as day-of-year, day-of-week and week-of-year, can also be accessed. Time is represented to nanosecond precision. For example, the value "2nd October 2007 at 13:45.30.123456789" can be stored in a LocalDateTime.
Eğer amacımız hem moment hem de time zone bilgisini saklamak ise ZonedDateTime sınıfını kullanmak gerekir.
LocalDateTime Nesnesini String'e Çevirme
1. format() metodu türevleri kullanılabilir. format metodu içine DateTimeFormatter alır.
2. toString() tarih ve zaman değerleri arasında T harfini koyduğu için pek kullanışlı değil. Çıktı olarak şuna benzer
2020-04-01T11:54:05.514
toString en kısa çıktıyi verir. Yani eğer saniye 00 ise LocalDateTime Bunu çıktı olarak vermez. Açıklaması şöyle
The output will be one of the following ISO-8601 formats:uuuu-MM-dd'T'HH:mmuuuu-MM-dd'T'HH:mm:ssuuuu-MM-dd'T'HH:mm:ss.SSSuuuu-MM-dd'T'HH:mm:ss.SSSSSSuuuu-MM-dd'T'HH:mm:ss.SSSSSSSSSThe format used will be the shortest that outputs the full value of the time where the omitted parts are implied to be zero.
Örnek
Elimizde şöyle bir kod olsun
List <LocalDateTime> times = Arrays.asList(
LocalDateTime.now(),
LocalDateTime.parse("2020-09-13T20:53", DateTimeFormatter.ISO_LOCAL_DATE_TIME),
LocalDateTime.parse(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME))
);
for (LocalDateTime time: times)
System.out.println("Time: " + time);
Çıktı olarak şunu alırız
Time: 2020-09-13T18:42:25.775
Time: 2020-09-13T20:53
Time: 2020-09-13T18:42:25.779
Bunun çözümü kendi kodladığımız bir DateTimeFormatter kullanmak. Şöyle yaparız
public static void main(String[] args) {
DateTimeFormatter isoDtf = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
List <LocalDateTime> times =
Arrays.asList(LocalDateTime.now(),
LocalDateTime.parse("2020-09-13T20:53", isoDtf),
LocalDateTime.parse(LocalDateTime.now().format(isoDtf)));
// specify the output format, require the units you need explicitly
DateTimeFormatter outputFormatter = DateTimeFormatter
.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS");
// and explicitly output the formatter LocalDateTime
for (LocalDateTime time: times)
System.out.println("Time: "+ time.format(outputFormatter));
}
Çıktı olarak şunu alırız
Time: 2020-09-15T15:09:08.011
Time: 2020-09-13T20:53:00.000
Time: 2020-09-15T15:09:08.027
LocalDateTime Nesnesinden ZonedDateTime Nesnesine Çevrim yazısına taşıdım.
format metodu - Hazır DateTimeFormatter Şablonu
Örnek
Şöyle yaparız.
System.out.println(ldt.format(DateTimeFormatter.ISO_TIME));
format metodu - Kendi DateTimeFormatter ŞablonumuzÖrnek
Şöyle yaparız.
DateTimeFormatter formatter =
DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSSSSSSS");
System.out.println(ldt.format(formatter));
Çıktı olarak şunu alırız.2016-08-12T09:38:12.123456789
getDayOfMonth metoduŞöyle yaparız.
ldt.
getDayOfMonth();
getMonthValue metodu
Şöyle yaparız.ldt.getMonthValue
();
getYear metodu
Şöyle yaparız.ldt.getYear();
minusDays metoduŞöyle yaparız.
LocalDateTime ldt = LocalDateTime.now().minusDays(30);
now metoduSistemin varsayılan Clock sınıfını kullanır. Şöyle yaparız.
LocalDateTime ldt = LocalDateTime.now();
now metodu - clockŞöyle yaparız.
Clock clock = ...;
LocalDateTime ldt =
LocalDateTime.now(clock); // Instead of just LocalDateTime.now()
of metodu - LocalDate + LocalTimeŞöyle yaparız.
LocalDate ld = LocalDate.of( 2018 , Month.DECEMBER , 25 ) ;
LocalTime lt = LocalTime.MIN ; // 00:00:00
LocalDateTime ldt = LocalDateTime.of( ld , lt ) ; // Xmas morning anywhere.
of metodu - year + month + dayOfMonth - hour + minute + second + nanosecondŞöyle yaparız.
LocalDateTime when =
LocalDateTime.of(2016, Month.AUGUST, 12, 9, 38, 12, 123456789);
Eğer yazdırırsak nanosaniye çözünürlüğünde veri saklayabildiğimiz görürüz. Şöyle yaparız.System.out.println(when);
Çıktı olarak şunu alırız.2016-08-12T09:38:12.123456789
Örnek
Şöyle yaparız
LocalDateTime.now(); // 2022-10-06T13:34:17.61565480 LocalDateTime.of(2022,Month.JANUARY,1,2,3,4,5)); // 2022-01-01T02:03:04.000000005 var d = LocalDate.of(2022,Month.JANUARY,1); var t = LocalTime.of(2,3,4,5); var dt = LocalDateTime.of(d, t); // 2022-01-01T02:03:04.000000005
ofEpochSeconds metodu
int seconds = ...;
int nanoSeconds = ...;
LocalDateTime t = LocalDateTime.ofEpochSecond(seconds, nanoSeconds, ZoneOffset.UTC);
ofInstant metodu - InstantBelirtilen Instant'ı yani UTC zaman noktasını belirtilen saat dilimine göre uyarlayarak o dilimin yerel saatine çevirir.
Örnek
Şöyle yaparız.
Calendar cal = Calendar.getInstance();
LocalDateTime ldt = LocalDateTime.ofInstant (cal.toInstant(),
ZoneId.systemDefault());
ÖrnekŞöyle yaparız.
Date date = ...;
long timestamp = date.getTime();
LocalDateTime ldt = LocalDateTime.ofInstant (Instant.ofEpochMilli(timestamp),
ZoneId.systemDefault());
parse metoduŞöyle yaparız.
LocalDateTime ldt = LocalDateTime.parse ("2016-04-04T08:00" );
truncatedTo metodu
Farklı makinelerde farklı çözünürlük elde edilebilir.
Farklı makinelerde farklı çözünürlük elde edilebilir.
Örnek
Çözünürlüğü değiştirerek nanosaniyeden milisaniye seviyesine getirmek için şöyle yaparız.
toString metodu
Açıklaması şöyle.
LocalDateTime.now(ZoneId.of("Europe/Berlin")).truncatedTo(ChronoUnit.MILLIS);
Örnek
Şöyle yaparız. Burada saat x:02 ise saat başına truncate ediliyor.
String[] arr = { "2021-02-08T19:02:49.594", "2021-02-08T19:56:49.594",
"2021-02-08T19:54:49.594",
"2021-02-08T19:06:49.594" };
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS");
for (String s : arr) {
System.out.println(roundToNearestHour(s).format(dtf));
}
static LocalDateTime roundToNearestHour(String str) {
LocalDateTime ldt = LocalDateTime.parse(str);
int minute = ldt.getMinute();
return minute < 5 ? ldt.truncatedTo(ChronoUnit.HOURS)
: (minute >= 55 ? ldt.plusHours(1).truncatedTo(ChronoUnit.HOURS) : ldt);
}
Çıktı olarak şunu alırız
2021-02-08T19:00:00.000
2021-02-08T20:00:00.000
2021-02-08T19:54:49.594
2021-02-08T19:06:49.594
Açıklaması şöyle.
Çıktı olarak şunu alırız. Sistem saati genellikle milisaniye çözünürlüğünde olduğu için çıktı da bu çözünürlüktedir.The format used will be the shortest that outputs the full value of the time where the omitted parts are implied to be zero.
2016-08-11T22:17:35.031
Hiç yorum yok:
Yorum Gönder