Java 8
обеспечивает новый набор временapi
, чем предыдущийCalendar
Классы намного проще. Существует три типа широко используемыхInstant
,LocalDate
,LocalDateTime
, Instant
используется для представления момента, напримерUnix
время с указанием отВсемирное координированное времяТакже можно получить общее количество секунд с 0:00:00 1 января 1970 года до настоящего времени и миллисекунд.LocalDate
Представляет дату, только год, месяц, день, без часов, минут и секунд.LocalDateTime
Это год, месяц, день, час, минута и секунда.
Instant
public static void main(String[] args) {
Instant now = Instant.now();
System.out.println("Now secoonds:" + now.getEpochSecond());
System.out.println("Now milli :" + now.toEpochMilli());
}
Выходное текущее время1970年1月1日0时0分0秒
секунды и миллисекунды
Now secoonds:1541321299
Now milli :1541321299037
LocalDateTime
Для облегчения формата выходного времени,Java8
при условииDateTimeFormatter
класс на замену предыдущемуSimpleDateFormat
.
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println("Now: " + now.format(formatter));
}
Now: 2018-11-04 16:53:09
LocalDateTime
Предоставляет множество методов расчета времени, таких как добавление часа, вычитание недели, добавление дня и т. д.Calendar
Гораздо удобнее.
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println("Now: " + now.format(formatter));
LocalDateTime nowPlusDay = now.plusDays(1);
System.out.println("Now + 1 day: " + nowPlusDay.format(formatter));
LocalDateTime nowMinusHours = now.minusHours(5);
System.out.println("Now - 5 hours: " + nowMinusHours.format(formatter));
}
Now: 2018-11-04 17:02:53
Now + 1 day: 2018-11-05 17:02:53
Now - 5 hours: 2018-11-04 12:02:53
LocalDateTime
а такжеisAfter
,isBefore
а такжеisEqual
метод можно использовать для сравнения двух времен.LocalDate
использование иLocalDateTime
похож.
Преобразование между Instant и LocalDateTime
Преобразование между ними связано с проблемой часового пояса.LocalDateTime
Используется системный часовой пояс по умолчанию. мы можем сначалаLocalDateTime
Преобразовать вZonedDateTime
, а затем преобразовать вInstant
.
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
System.out.println("Now: " + now.format(formatter));
Instant nowInstant = now.atZone(ZoneId.systemDefault()).toInstant();
System.out.println("Now mini seconds: " + nowInstant.toEpochMilli());
}
Now: 2018-11-04 17:19:16
Now mini seconds: 1541323156101
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
Instant now = Instant.now();
System.out.println("Now mini seconds: " + now.toEpochMilli());
LocalDateTime nowDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());
System.out.println("Zone id: " + ZoneId.systemDefault().toString());
System.out.println("Now: " + nowDateTime.format(formatter));
}
Now mini seconds: 1541323844781
Zone id: Asia/Shanghai
Now: 2018-11-04 17:30:44