Video: Understanding Time Zones 2024
Precis som du inte kan använda Java: s inbyggda jämförelseoperatörer med datum, kan du inte använda inbyggda matematiska operatörer. I stället kan du utföra addition och subtraktion på datum med de olika metoderna
plus
och
minus
, och du kan bestämma skillnaden mellan två datum med hjälp av metoden
till
.
Ett viktigt faktum att tänka på när man gör datum- och tidsberäkningar är att datum-tid-objekt är oföränderliga. Det innebär att när du skapar ett Date-Time-objekt kan du inte ändra sitt värde. När du utför en beräkning i ett Date-Time-objekt, är resultatet ett nytt Date-Time-objekt med ett nytt värde.
Med metoderna
plus
och
minus
kan du lägga till olika datum- och tidsenheter till ett datum-tid-objekt. Det finns fyra varianter av var och en för klassen
LocalDate
, så att du kan lägga till eller subtrahera år, månader, veckor och dagar till ett
LocalDate
-objekt. Följande kod skriver ut det aktuella datumet, morgondagens datum och datumet en vecka, en månad och ett år från nu:
System. ut. println ("Today:" + LocalDate. now ());
System. ut. println ("Tomorrow:" + LocalDate. now (). plusDays (1));
System. ut. println ("Nästa vecka:" + LocalDate. now (). plusWeeks (1));
System. ut. println ("Nästa månad:" + LocalDate. now (). plusMonths (1));
System. ut. println ("Nästa år:" + LocalDate. now (). plusYears (1));
För att bestämma skillnaden mellan två datum, använd metoden
till
. Det beräknar skillnaden mellan ett datum och det datum som passerat som den första parametern, mätt i enheterna som indikeras av den andra parametern. Till exempel bestämmer följande kod antal dagar mellan 16 maj 2014 och 15 december 2014:
LocalDate date1 = LocalDate. parse (”2014/05/16”);
LocalDate date2 = LocalDate. parse (”2014/12/15”);
System. ut. println (datum1 till och med (datum2, ChronoUnit. DAYS));
Vissa datumberäkningar kan vara lite mer komplexa. Tänk på ett företag som förbereder fakturor den 15: e varje månad. Följande kodkod visar antalet dagar från det aktuella datumet till nästa faktureringsdatum:
LocalDate today = LocalDate. nu();
LocalDate invDate = LocalDate. av (idag. getYear (),
idag. getMonthValue (), 15);
om (idag. GetDayOfMonth ()> 15)
invDate = invDate. plusMonths (1);
långa dagarToInvoice = idag. tills (invDate,
ChronoUnit. DAYS);
System. ut. println (daysToInvoice
+ "till nästa fakturadatum.”);
Detta exempel fungerar genom att först hämta det aktuella datumet och sedan skapa ett nytt
LocalDate
-objekt som representerar den 15: e aktuella månaden. Om den aktuella dagen i månaden är större än 15, lägger den sedan till en månad till faktureringsdatumet. Med andra ord, om det är 16 eller senare, förekommer fakturering den 15: e den följande månaden, inte den här månaden. Sedan använder den metoden
till
för att bestämma antalet dagar mellan det aktuella datumet och nästa faktureringsdatum.
ChronoUnit
är en uppräkning som definierar de olika tidsenheter som kan användas i datum- och tidsberäkningar. De möjliga värdena är:
CENTURIES
DAYS
DECADES
ERAS
FOREVER
HALVDAGAR
HOURS
MICROS
MILLENNIA
MILLIS
MINUTER
MÅNADER
NANOS
SECONDS
WEEKS
ÅR
De flesta av dessa är självklarande, men två av dem är lite sällsynta:
-
ERA
anger om Datumet refererar till den gemensamma tiden (CE, även känd som AD) eller före Era (BCE, även känd som BC). -
FOREVER
representerar det största värdet som kan representeras som en varaktighet. Tyvärr kommer Java inte att låta dig leva för alltid. Följande kod kastar ett undantag:
LocalDate birthday = LocalDate. parse (”1959/05/16);
födelsedag = födelsedag. plus (1, ChronoUnit. FOREVER);
Observera att
ChronoUni
t är i
java. tid. temporal
-paket, så var noga med att inkludera följande uttalande högst upp i något program som använder
ChronoUnit
:
import java. tid. timlig. *;