Exploring The Java - Time API: Maurice Naftalin
Exploring The Java - Time API: Maurice Naftalin
time API
Maurice Naftalin
@mauricenaftalin
Summary
Summary
Core classes
Summary
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion
9:00
12:00
15:00
18:00
21:00
What is a WorkPeriod?
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
12:00
15:00
18:00
21:00
What is a WorkPeriod?
1 2
WorkPeriod LocalDateTime
What is a WorkPeriod?
1 2
WorkPeriod LocalDateTime
9:00
12:00
15:00
18:00
21:00
Generating WorkPeriods
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
12:00
15:00
18:00
21:00
Generating WorkPeriods
The java.time API — examples
LocalTime LocalDate LocalDateTime Duration
Creation
Field access
Adjustment
Comparison
Conversion
@Test
public void testGenerateWorkPeriods() {
LocalDate thur24May2017 = LocalDate.of(2018, 5, 24);
List<WorkPeriod> workPeriods = Utils.generateWorkPeriods(thur24May2017, 3);
assertEquals(6, workPeriods.size());
assertEquals(Arrays.asList(THURSDAY, FRIDAY, MONDAY),
workPeriods.stream()
.map(WorkPeriod::getStartTime)
.map(LocalDateTime::getDayOfWeek)
.distinct()
.collect(toList()));
}
workPeriod.getStartTime().get(AMPM_OF_DAY)
workPeriod.getStartTime().get(AMPM_OF_DAY)
workPeriod.getStartTime().get(DAY_OF_WEEK)
ldt1 ldt2
p1
Splitting periods
ldt1 ldt2
p1
Splitting periods
p1
Splitting periods
p1
Splitting periods
p1 p2
The java.time API — examples
LocalTime LocalDate LocalDateTime Duration
Creation of(int,int) of(int,int,int) of(LocalDate,LocalTime) ofHours(long)
Field access getDayOfWeek() getDayOfWeek() plusMinutes(long)
Adjustment plusDays(long) plus(Duration)
Comparison
Conversion
@Test
public void basicSplitTest() {
LocalDateTime startTime = LocalDate.now().atTime(23, 0);
9:00
12:00
answer urgent e-mail 1:00
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
12:00
answer urgent e-mail 1:00
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
12:00
answer urgent e-mail 1:00
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
Answer urgent e-mail
12:00
Write deployment report answer urgent e-mail 1:00
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
Answer urgent e-mail
12:00
Write deployment report answer urgent e-mail 1:00
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
Answer urgent e-mail
18:00
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
Answer urgent e-mail
21:00
A Task Scheduler
6:00
Tue May 22 Wed May 23 Thu May 24
9:00
Answer urgent e-mail
21:00
What is a WorkPeriod?
1 2
WorkPeriod LocalDateTime
What is a WorkPeriod?
2
LocalDateTime
1
WorkPeriod
What is a WorkPeriod?
2
LocalDateTime
1
WorkPeriod
Task
What is a WorkPeriod?
2
LocalDateTime
1
WorkPeriod
TaskPart Task
What is a WorkPeriod?
2
LocalDateTime
1
WorkPeriod
TaskPart Task
* 1
What is a WorkPeriod?
2
LocalDateTime
1
WorkPeriod
1
* TaskPart Task
* 1
Splitting a task-containing period
LocalDate may22 = LocalDate.of(2018,Month.MAY,22);
LocalDateTime startTime = LocalDateTime.of(may22,LocalTime.of(9,0));
WorkPeriod p1 = new WorkPeriod(startTime,startTime.plus(Duration.ofHours(3));
9:00 12:00
Splitting a task-containing period
LocalDate may22 = LocalDate.of(2018,Month.MAY,22);
LocalDateTime startTime = LocalDateTime.of(may22,LocalTime.of(9,0));
WorkPeriod p1 = new WorkPeriod(startTime,startTime.plus(Duration.ofHours(3));
9:00 12:00
Task 1 part 1 Task 2 part 1 Task 3 part 1 Task 4 part 1 Task 5 part 1
Splitting a task-containing period
LocalDate may22 = LocalDate.of(2018,Month.MAY,22);
LocalDateTime startTime = LocalDateTime.of(may22,LocalTime.of(9,0));
WorkPeriod p1 = new WorkPeriod(startTime,startTime.plus(Duration.ofHours(3));
Task 1 part 1 Task 2 part 1 Task 3 part 1 Task 4 part 1 Task 5 part 1
Using NavigableMap
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
Using NavigableMap
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
keys values
2018-05-22T09:00 Task 1 part 1
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
keys values
2018-05-22T09:00 Task 1 part 1
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
keys values
2018-05-22T09:00 Task 1 part 1 timeToTaskPart.headMap(
2018-05-22T10:30)
2018-05-22T09:40 Task 2 part 1
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
keys values
2018-05-22T09:00 Task 1 part 1 timeToTaskPart.headMap(
2018-05-22T10:30)
2018-05-22T09:40 Task 2 part 1
NavigableMap<LocalDateTime,TaskPart> timeToTaskPart;
keys values
2018-05-22T09:00 Task 1 part 1 timeToTaskPart.headMap(
timeToTaskPart.lowerEntry(
2018-05-22T10:30)
2018-05-22T10:30)
2018-05-22T09:40 Task 2 part 1
WorkPeriod p2 = p1.split(splitTime);
Task 1 part 1 Task 2 part 1 Task 3 part 1 Task 4 part 1 Task 5 part 1
Splitting a task-containing period
WorkPeriod p2 = p1.split(splitTime);
p2 Task 1 part 1 Task 2 part 1 Task 3 part 1 Task 4 part 1 Task 5 part 1
p1
Splitting a task-containing period
WorkPeriod p2 = p1.split(splitTime);
WorkPeriod p2 = p1.split(splitTime);
WorkPeriod p2 = p1.split(splitTime);
WorkPeriod p2 = p1.split(splitTime);
Summary
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion
Core classes
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion
• LocalDateTime, LocalDate,
LocalTime, Duration
Summary Core class methods
• Creation, field access, adjustment,
comparison, conversion