Javas nya Date and Time
API kommer att placeras I en egen package-struktur med java.time som bas. Dokumentationen för de ingående klasser och
interface antyder att API:et är mer svårbemästrat än vad det verkligen är. Alla klasser är
immutable, trådsäkra och baserade på den internationella standarden för
kalendrar, ISO 8601. Även om huvudspåret följer den Gregorianska kalendern, så
finns det stöd för många olika kalendrar såsom ThaiBuddhist respektive Japanese
Imperial. Månader som veckodagar hanteras
nu med var sin Enum där konstanterna anges med engelska namn och har ett
värdenummer som följer standard, vilket innebär att MONDAY räknas som dag 1 i
veckan och DECEMBER har värdet 12. Det tog 18 år av Java-utveckling att komma
hit…
De mest intressanta klasserna i API:et är följande:
LocalDate – Ett
”normalt” datum skrivet på formen YYYY-MM-DD
enligt ISO-standarden och därmed kanske vi kan bli av med avarter som formaten
mån/dag/år respektive dag/mån/år vilka kan ställa till stora problem där dag och
månad lätt kan förväxlas. Bland en uppsjö av metoder kan nämnas ett flertal som
tar fram ett nytt objekt baserat på stegning framåt eller bakåt utefter en
datumlinje baserat på antal dagar, veckor, månader eller år.
LocalTime – En
tidpunkt utan vare sig datum eller tidszon, med en upplösning på ner till
nanosekund. Format enligt HH:MM:SS.xxxxxxxxx
LocalDateTime –
En komplett tidsangivelse där såväl datum som tid på ett kombinerat format av
de två beståndsdelarna med ett T som skiljetecken; YYYY-MM-DDTHH:MM:SS.xxx
Instant – En
tidsstämpel som anges med nanosekunds precision. Detta är en klass som typiskt
kommer att få stor användning vid loggning.
Clock – En
abstrakt klass som kan användas för att ta fram aktuell tidpunkt, vilket även
kommer att vara möjligt via metoden now() som finns i ett flertal klasser.
Huvudsyftet med Clock är att stödja
plug-in av alternativa implementationer där exempelvis en offset kan
anges. Clock kan typiskt förenkla tester med inbyggda tidsberoenden.
Duration – En
klass som beräknar tid mellan två Instant objekt vilka anger tidpunkter utefter
en tidslinje. Det är möjligt att beräkna negativ tid genom att ange inparametrar
mot tidaxelns riktning.
ZoneId – En klass
som modellerar tidszoner med ett id som är unikt inom systemet. Olika tidzoner
kan anges med speciella prefix såsom 'UTC',
'GMT', 'UT' '+' eller '-', men kan också vara mera läsbara regionala id
såsom Europe/Paris.
Slutligen ett citat från API dokumentationen som visar på
att de nya klasserna och metoderna kan vara lätta att läsa och förstå även för
en utomstående:
LocalDate
customerBirthday = customer.loadBirthdayFromDatabase();
LocalDate today
= LocalDate.now();
if
(customerBirthday.equals(today)) {
LocalDate specialOfferExpiryDate =
today.plusWeeks(2).with(next(FRIDAY));
customer.sendBirthdaySpecialOffer(specialOfferExpiryDate);
}
Kan det bli tydligare? Skynda att fynda!
/Kjell H Carlsson
Intresserad av att förkovra dig inom Java? Då ska du kika in på dessa länkar:
Skicka en kommentar
Trevligt att du vill dela med dig av dina åsikter! Tänk på att hålla på "Netiketten" och använda vårdat språk.