Java - Date and Time
java.time
Java 8 introduced a new package java.time
for better handling date and time. It is essentially an improved version of joda-time(so joda-time is deprecated after 8)
jshell> import java.time.LocalDate;
jshell> LocalDate date = LocalDate.parse("2020-01-01");
date ==> 2020-01-01
jshell> date.getYear()
$3 ==> 2020
Timezone
jshell> import java.time.ZoneId;
jshell> ZoneId zoneId = ZoneId.of("America/Los_Angeles");
zoneId ==> America/Los_Angeles
Start of day
jshell> date.atStartOfDay(zoneId);
$6 ==> 2020-01-01T00:00-08:00[America/Los_Angeles]
jshell> date.atStartOfDay(zoneId).toEpochSecond();
$7 ==> 1577865600
End of day. There's no .atEndOfDay()
method though.
jshell> date.plusDays(1).atStartOfDay(zoneId);
$8 ==> 2020-01-02T00:00-08:00[America/Los_Angeles]
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("ddMMMyyyy")
.toFormatter();
LocalDate date = LocalDate.parse("02APR2015", formatter);
Assert.assertEquals(date.getMonth(), Month.APRIL);
Date Conversions
Step 0: Import
import java.text.SimpleDateFormat;
import java.util.Date;
Step 1. Define format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Step 2. Conversions
//String -> Date
Date d = sdf.parse("2011/12/04 00:00:00");
//Date -> String
String dateTimeString1 = sdf.format(new Date());
String dateTimeString2 = sdf.format(System.currentTimeMillis()));
//Long -> Date
Date d = new Date(System.currentTimeMillis());
//Date -> Long
long time = d.getTime();
Running Time
record running time:
long startTime = System.currentTimeMillis();
//do something
long endTime = System.currentTimeMillis();
System.out.println((endTime - startTime)/1000);
final long start = System.nanoTime();
final long end = System.nanoTime();
System.out.println("Time (seconds) taken " + (end - start)/1.0e9);