SlideShare a Scribd company logo
1 of 42
Sualeh Fatehi
Java 8 Date and
Time API
This work by Sualeh Fatehi is licensed under
a Creative Commons Attribution-
NonCommercial 4.0 International License.
 Review the current date and time API
 Understand date and time concepts
 Take a look at the new date and time API
Overview
Several problems here:
1. Which 12 is for which date field?
2. Month 12 is December, right? No. January.
3. Year 12 is 12 CE, right? Wrong. 1913.
4. Wait - there is a time in a date?
5. More than that, there is a time zone.
Problems Getting a Date
System.out.println(new Date(12, 12, 12));
// Sun Jan 12 00:00:00 EST 1913
 Conceptually an instant, not a date
 Properties have random offsets
 Some zero-based, like month and hours
 Some one-based, like day of the month
 Year has an offset of 1900
 Mutable, not thread-safe
 Not internationalizable
 Millisecond granularity
 Does not reflect UTC
A Sorry Implementation
 Date was the work of James Gosling and
Arthur van Hoff
 Added in JDK 1.0, mostly deprecated in
JDK 1.1, never removed
 IBM donated Calendar code to Sun
Back Story
System.out.println(new
GregorianCalendar(12, 12, 12));
Revisited Examples
java.util.GregorianCalendar[time=?,areFieldsSet=false,areA
llFieldsSet=false,lenient=true,zone=sun.util.calendar.Zone
Info[id="America/New_York",offset=-
18000000,dstSavings=3600000,useDaylight=true,transitions=2
35,lastRule=java.util.Simpletime
zone[id=America/New_York,offset=-
18000000,dstSavings=3600000,useDaylight=true,startYear=0,s
tartMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startT
ime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1
,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOf
Week=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=12,MONTH=12,WEE
K_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=12,DAY_OF_YEAR=?,
DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_O
F_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_
OFFSET=?]
Several problems here:
1. Which 12 is for which date field?
2. Month 12 is December, right? No. January.
3. They got the year right! Almost. 13 CE.
4. Wait - there is a time in a calendar?
5. More than that, there is a time zone.
Problems Getting a Date
System.out.println(dtFmt.format(new
GregorianCalendar(12,12,12).getTime()));
// January 12, 0013 12:00:00 AM EST
 “Calendar” represents a date, time and
time-zone
 Defaults to Gregorian calendar
 In Thailand only, you get a Buddhist
calendar
 You can ask specifically ask for a Japanese
calendar
Calendar
 Conceptually an instant, not a calendar
 But, can’t create a Calendar from a Date
 Can’t format a Calendar
 Zero-based offsets
 Stores internal state in two different ways
 milliseconds from epoch
 set of fields
 Has bugs and performance issues
 Mutable, not thread-safe
Not Much Improvement
 2002 - Stephen Colebourne starts open
source Joda-Time project
 2005 - Release of Joda-Time 1.0
 2007 - JSR 310, for inclusion in Java
 2011 - Release of Joda-Time 2.0
 2014 - Finally, the date and time API is in
Java 8
Java 8 Date and Time API
No problems:
1. ISO 8601 order of fields - year, month, day.
2. Month 12 is December.
3. Year is 12 CE.
4. No time component.
5. No time zone.
No Problem Getting a Date
System.out.println(
LocalDate.of(12, 12, 12));
// 0012-12-12
System.out.println(
LocalDate.of(13, 13, 13));
Bad Arguments
java.time.DateTimeException: Invalid value for MonthOfYear
(valid values 1 - 12): 13
at java.time.temporal.ValueRange.checkValidValue(Unknown
Source)
at
java.time.temporal.ChronoField.checkValidValue(Unknown Source)
at java.time.LocalDate.of(Unknown Source)
…
Most importantly, the Java 8 date and time
API forces you to think carefully about what
you are doing.
Concepts
// Don’t code like this again
Calendar calendar = new GregorianCalendar();
Date date = calendar.getTime();
 Reference point to measure time
 May be based on religious or political
milestones
 Divides the timeline into eras
 Start of a particular era
Epoch
 January 0, 0 - MATLAB
 January 1, 1 - Symbian, .NET
 January 1, 1601 - COBOL, Windows
 January 1, 1900 - LISP, SNTP
 January 1, 1904 – Old Mac OS
 January 1, 1970 - Unix Epoch (Linux, Mac
OS X), Java, C, JavaScript, Perl, PHP,
Python, Ruby
Computer System Epochs
 Organizes days for social, religious,
commercial or administrative purposes
 Names periods like days, weeks, months,
and years
 Periods may follow cycles of the sun or
moon
 A date is a specific day in the system
 May be based on an epoch
Calendar System
 GMT is Greenwich Mean Time
 Mean solar time at the Royal Observatory
in Greenwich
 UTC is Coordinated Universal Time
 Precisely defined with atomic time
 Does not change with seasons
 Replaced GMT as reference time scale on
1 January 1972
UTC
 International standard for representation of
dates and times
 Uses the Gregorian calendar system
 Ordered from most to least significant:
year, month, day, hour, minute
 Each date and time value has a fixed
number of digits with leading zeros
 Uses four-digit year at minimum, YYYY
ISO 8601
http://xkcd.com/1179/
 Machines have one view of time
 discrete points corresponding to the smallest
measurement possible
 a single, ever increasing number
 Humans have a different view of time
 continuous timelines
 calendar systems
 arbitrary units like years, months, days, hours
 time zones, and daylight savings rules
Machine and Human Timelines
 Distinguish between machine and human
views
 Well-defined and clear purpose
 Immutable, thread-safe
 Reject null and bad arguments early
 Extensible, by use of strategy pattern
 Fluent interface with chained methods
Design Principles
 Point on a discretized time-line
 Stored to nanosecond resolution
 long for seconds since epoch, and
 int for nanosecond of second
 Convert to any date time field using a
Chronology
 Use for event time-stamps
Instant
 An indication of date or time that cannot
identify a specific, unique instant
 Definition uses fields such as year, month,
day of month, and time of day
 Commonly used partials, such
as LocalDate and LocalTime are available
 Others like MonthDay, YearMonth (card
expiration?) are also available
Partial
 Precise length of elapsed time, in
nanoseconds
 Does not use date-based constructs like
years, months, and days
 Can be negative, if end is before start
Duration
 A length of elapsed time
 Defined using calendar fields - years,
months, and days (not minutes and
seconds)
 Takes time zones into account for
calculation
Period
 Region with uniform standard time for
legal, commercial, social, and political
purposes
 Some countries use daylight saving time for
part of the year
 Offset from UTC (UTC-12 to UTC+14)
 UTC is sometimes denoted by Z (Zulu)
 JDK time zone data is updated with JDK
releases
Time Zone
 Gets the current instant using a time-zone
 Use instead of System.currentTimeMillis()
 Use an alternate clock for testing
Clock
public class SomeBean {
@Inject private Clock clock;
public void process() {
LocalDate date = LocalDate.now(clock);
...
}
}
 Pluggable calendar system
 Provides access to date and time fields
 Built-in
 ISO8601 (default): IsoChronology
 Chinese: MinguoChronology
 Japanese: JapaneseChronology
 Thai Buddhist: ThaiBuddhistChronology
 Islamic: HijrahChronology
Chronology
 java.time - instants, durations, dates,
times, time zones, periods
 java.time.format - formatting and parsing
 java.time.temporal - field, unit, or
adjustment access to temporals
 java.time.zone – support for time zones
 java.time.chrono - calendar systems other
than ISO-8601
New Packages
 LocalDate
 ISO 8601 date without time zone and time
 Corresponds to SQL DATE type
 Example: birthdate or employee hire-date
 LocalTime
 ISO 8601 time without time zone and date
 Corresponds to SQL TIME type
 Example: the time that an alarm clock goes off
 LocalDateTime
 ISO 8601 date and time without time zone
 Corresponds to SQL TIMESTAMP type
Commonly Used Classes
Class or Enum Year Month Day Hours Minutes Nanos
Zone
Offset
Zone
ID toString Output
Instant ✓ 2013-08-20T15:16:26.355Z
LocalDate ✓ ✓ ✓ 2013-08-20
LocalDateTime ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-20T08:16:26.937
ZonedDateTime ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-21T00:16:26.941+09:00[Asia/Tokyo]
LocalTime ✓ ✓ ✓ 08:16:26.943
MonthDay ✓ ✓ --08-20
Year ✓ 2013
YearMonth ✓ ✓ 2013-08
Month ✓ AUGUST
OffsetDateTime ✓ ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-20T08:16:26.954-07:00
OffsetTime ✓ ✓ ✓ ✓ 08:16:26.957-07:00
Duration ✓ PT20H
Period ✓ ✓ ✓ P10D
Commonly Used Classes
http://docs.oracle.com/javase/tutorial/datetime/iso/overview.html
 of - static factory, validates input
 from - static factory, converts to instance
of target class
 get - returns part of the state
 is - queries the state
 with - immutable copy with elements
changed
 to - converts to another object type
 plus, minus - immutable copy after
operation
Consistent Operations
 Day of week, for example
DayOfWeek.SUNDAY
 Month , for example
LocalDate.of(2014, Month.MAY, 20);
 Time units, for example
Instant.now().plus(1, ChronoUnit.DAYS)
 Other useful constants
 LocalTime.MIDNIGHT // 00:00
 LocalTime.NOON // 12:00
Staying Constant
 Format with a DateTimeFormatter instance
 Internationalization is supported
 Custom formats can be used, including
am/ pm for time
Formatting
 Parse with a DateTimeFormatter instance
 parse(…) methods return a temporal
 Use from(…) to convert to a known date or
time type
Parsing
TemporalAdjuster fourMinutesLater =
new TemporalAdjuster() {
@Override
public Temporal adjustInto(Temporal
temporal) {
return temporal.plus(4,
ChronoUnit.MINUTES);
}
};
LocalTime time = LocalTime.of(12, 0, 0);
LocalTime later = time.with(fourMinutesLater);
Temporal Adjusters
LocalTime time = LocalTime.of(12, 0, 0);
time.with(temporal ->
temporal.plus(4, ChronoUnit.MINUTES)));
Temporal Adjusters
Java 8 Style
 Strategy for extracting information from
temporals
 Externalize the process of querying
 Examples
 get the time zone in a temporal
 check if date is February 29 in a leap year
 calculate days until your next birthday
 TemporalQueries class has
implementations of common queries
Temporal Queries
 Existing date-related APIs can be error-
prone and tedious
 Separate concepts of computer-related
times and human-related times
Need to manipulate dates and times? Use
Joda-Time or the Java 8 date and time API.
Summary
 JSR 310: A New Java Date/Time API
 Joda-Time
 Why JSR-310 isn't Joda-Time
 Java 101: The next generation: It's time for
a change
Resources
Code used in this presentation on GitHub:
https://github.com/sualeh/java8-timeapi-examples
Code
Questions?

More Related Content

What's hot

08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadata08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadatarehaniltifat
 
Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7Pasi Kellokoski
 
Lists and scrollbars
Lists and scrollbarsLists and scrollbars
Lists and scrollbarsmyrajendra
 
Sling Models Using Sightly and JSP by Deepak Khetawat
Sling Models Using Sightly and JSP by Deepak KhetawatSling Models Using Sightly and JSP by Deepak Khetawat
Sling Models Using Sightly and JSP by Deepak KhetawatAEM HUB
 
Java layoutmanager
Java layoutmanagerJava layoutmanager
Java layoutmanagerArati Gadgil
 
Control structures in java
Control structures in javaControl structures in java
Control structures in javaVINOTH R
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File HandlingSunil OS
 
Java 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesJava 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesGanesh Samarthyam
 
Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1PRN USM
 
Stored-Procedures-Presentation
Stored-Procedures-PresentationStored-Procedures-Presentation
Stored-Procedures-PresentationChuck Walker
 

What's hot (20)

Best sql plsql material
Best sql plsql materialBest sql plsql material
Best sql plsql material
 
08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadata08 Dynamic SQL and Metadata
08 Dynamic SQL and Metadata
 
Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7
 
Lists and scrollbars
Lists and scrollbarsLists and scrollbars
Lists and scrollbars
 
Sling Models Using Sightly and JSP by Deepak Khetawat
Sling Models Using Sightly and JSP by Deepak KhetawatSling Models Using Sightly and JSP by Deepak Khetawat
Sling Models Using Sightly and JSP by Deepak Khetawat
 
Packages in java
Packages in javaPackages in java
Packages in java
 
Applet in java
Applet in javaApplet in java
Applet in java
 
Java layoutmanager
Java layoutmanagerJava layoutmanager
Java layoutmanager
 
JDBC
JDBCJDBC
JDBC
 
Recyclerview in action
Recyclerview in action Recyclerview in action
Recyclerview in action
 
Applets
AppletsApplets
Applets
 
Java swing
Java swingJava swing
Java swing
 
Java rmi
Java rmiJava rmi
Java rmi
 
Control structures in java
Control structures in javaControl structures in java
Control structures in java
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File Handling
 
Java 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional InterfacesJava 8 Lambda Built-in Functional Interfaces
Java 8 Lambda Built-in Functional Interfaces
 
Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1Graphical User Interface (GUI) - 1
Graphical User Interface (GUI) - 1
 
Java applet
Java appletJava applet
Java applet
 
Stored-Procedures-Presentation
Stored-Procedures-PresentationStored-Procedures-Presentation
Stored-Procedures-Presentation
 
Notification android
Notification androidNotification android
Notification android
 

Viewers also liked

Modern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIModern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIGanesh Samarthyam
 
Short history of time - Confitura 2013
Short history of time - Confitura 2013Short history of time - Confitura 2013
Short history of time - Confitura 2013nurkiewicz
 
Groovy Tutorial
Groovy TutorialGroovy Tutorial
Groovy TutorialPaul King
 
Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilEduardo Bregaida
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz QuestionsGanesh Samarthyam
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz QuestionsGanesh Samarthyam
 
9781111530532 ppt ch14
9781111530532 ppt ch149781111530532 ppt ch14
9781111530532 ppt ch14Terry Yoast
 
9781285852744 ppt ch16
9781285852744 ppt ch169781285852744 ppt ch16
9781285852744 ppt ch16Terry Yoast
 
AWS Innovate: AWS Container Management using Amazon EC2 Container Service an...
AWS Innovate:  AWS Container Management using Amazon EC2 Container Service an...AWS Innovate:  AWS Container Management using Amazon EC2 Container Service an...
AWS Innovate: AWS Container Management using Amazon EC2 Container Service an...Amazon Web Services Korea
 
Data Structures- Part9 trees simplified
Data Structures- Part9 trees simplifiedData Structures- Part9 trees simplified
Data Structures- Part9 trees simplifiedAbdullah Al-hazmy
 
Data Structures- Part8 stacks and queues
Data Structures- Part8 stacks and queuesData Structures- Part8 stacks and queues
Data Structures- Part8 stacks and queuesAbdullah Al-hazmy
 
Data Structures- Part2 analysis tools
Data Structures- Part2 analysis toolsData Structures- Part2 analysis tools
Data Structures- Part2 analysis toolsAbdullah Al-hazmy
 
OCJP Samples Questions: Exceptions and assertions
OCJP Samples Questions: Exceptions and assertionsOCJP Samples Questions: Exceptions and assertions
OCJP Samples Questions: Exceptions and assertionsHari kiran G
 
Applying Design Patterns in Practice
Applying Design Patterns in PracticeApplying Design Patterns in Practice
Applying Design Patterns in PracticeGanesh Samarthyam
 

Viewers also liked (20)

Modern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time APIModern Programming in Java 8 - Lambdas, Streams and Date Time API
Modern Programming in Java 8 - Lambdas, Streams and Date Time API
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
Short history of time - Confitura 2013
Short history of time - Confitura 2013Short history of time - Confitura 2013
Short history of time - Confitura 2013
 
Groovy Tutorial
Groovy TutorialGroovy Tutorial
Groovy Tutorial
 
Java 8 date & time
Java 8 date & timeJava 8 date & time
Java 8 date & time
 
Spring MVC - QConSP
Spring MVC - QConSPSpring MVC - QConSP
Spring MVC - QConSP
 
Cultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágilCultura da empresa - um problema na adoção ágil
Cultura da empresa - um problema na adoção ágil
 
Java Generics - Quiz Questions
Java Generics - Quiz QuestionsJava Generics - Quiz Questions
Java Generics - Quiz Questions
 
Software Architecture - Quiz Questions
Software Architecture - Quiz QuestionsSoftware Architecture - Quiz Questions
Software Architecture - Quiz Questions
 
Chap01
Chap01Chap01
Chap01
 
9781111530532 ppt ch14
9781111530532 ppt ch149781111530532 ppt ch14
9781111530532 ppt ch14
 
9781285852744 ppt ch16
9781285852744 ppt ch169781285852744 ppt ch16
9781285852744 ppt ch16
 
DDD + BDD + TDD + Scrum
DDD + BDD + TDD + ScrumDDD + BDD + TDD + Scrum
DDD + BDD + TDD + Scrum
 
AWS Innovate: AWS Container Management using Amazon EC2 Container Service an...
AWS Innovate:  AWS Container Management using Amazon EC2 Container Service an...AWS Innovate:  AWS Container Management using Amazon EC2 Container Service an...
AWS Innovate: AWS Container Management using Amazon EC2 Container Service an...
 
Data Structures- Part9 trees simplified
Data Structures- Part9 trees simplifiedData Structures- Part9 trees simplified
Data Structures- Part9 trees simplified
 
Data Structures- Part8 stacks and queues
Data Structures- Part8 stacks and queuesData Structures- Part8 stacks and queues
Data Structures- Part8 stacks and queues
 
Data Structures- Part2 analysis tools
Data Structures- Part2 analysis toolsData Structures- Part2 analysis tools
Data Structures- Part2 analysis tools
 
OCJP Samples Questions: Exceptions and assertions
OCJP Samples Questions: Exceptions and assertionsOCJP Samples Questions: Exceptions and assertions
OCJP Samples Questions: Exceptions and assertions
 
DDD - Linguagem Ubíqua
DDD - Linguagem UbíquaDDD - Linguagem Ubíqua
DDD - Linguagem Ubíqua
 
Applying Design Patterns in Practice
Applying Design Patterns in PracticeApplying Design Patterns in Practice
Applying Design Patterns in Practice
 

Similar to Java 8 Date and Time API

Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8Fulvio Corno
 
Date and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesDate and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesMaggie Pint
 
Data Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing ItData Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing Itkanaugust
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4Kenji HASUNUMA
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4Kenji HASUNUMA
 
JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8Serhii Kartashov
 
How to work with dates and times in swift 3
How to work with dates and times in swift 3How to work with dates and times in swift 3
How to work with dates and times in swift 3allanh0526
 
Php date & time functions
Php date & time functionsPhp date & time functions
Php date & time functionsProgrammer Blog
 
27- System Funciton in Azure Data Factory.pptx
27- System Funciton in Azure Data Factory.pptx27- System Funciton in Azure Data Factory.pptx
27- System Funciton in Azure Data Factory.pptxBRIJESH KUMAR
 
Date and Timestamp Types In Snowflake (By Faysal Shaarani)
Date and Timestamp Types In Snowflake (By Faysal Shaarani)Date and Timestamp Types In Snowflake (By Faysal Shaarani)
Date and Timestamp Types In Snowflake (By Faysal Shaarani)Faysal Shaarani (MBA)
 
Brand new Date and Time API
Brand new Date and Time APIBrand new Date and Time API
Brand new Date and Time APIKenji HASUNUMA
 
Brand New Date and Time API
Brand New Date and Time APIBrand New Date and Time API
Brand New Date and Time APIKenji HASUNUMA
 
Date and Time MomentJS Edition
Date and Time MomentJS EditionDate and Time MomentJS Edition
Date and Time MomentJS EditionMaggie Pint
 
Lesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptxLesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptxLagamaPasala
 
704 instructional ppt timeand date
704 instructional ppt timeand date704 instructional ppt timeand date
704 instructional ppt timeand dateBeth Kovacic
 
That Conference Date and Time
That Conference Date and TimeThat Conference Date and Time
That Conference Date and TimeMaggie Pint
 

Similar to Java 8 Date and Time API (20)

Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8Dates and Times in Java 7 and Java 8
Dates and Times in Java 7 and Java 8
 
Date and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesDate and Time Odds Ends Oddities
Date and Time Odds Ends Oddities
 
17 ruby date time
17 ruby date time17 ruby date time
17 ruby date time
 
Data Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing ItData Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing It
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4
 
doc
docdoc
doc
 
jkfdlsajfklafj
jkfdlsajfklafjjkfdlsajfklafj
jkfdlsajfklafj
 
Fun times with ruby
Fun times with rubyFun times with ruby
Fun times with ruby
 
JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8
 
How to work with dates and times in swift 3
How to work with dates and times in swift 3How to work with dates and times in swift 3
How to work with dates and times in swift 3
 
Php date & time functions
Php date & time functionsPhp date & time functions
Php date & time functions
 
27- System Funciton in Azure Data Factory.pptx
27- System Funciton in Azure Data Factory.pptx27- System Funciton in Azure Data Factory.pptx
27- System Funciton in Azure Data Factory.pptx
 
Date and Timestamp Types In Snowflake (By Faysal Shaarani)
Date and Timestamp Types In Snowflake (By Faysal Shaarani)Date and Timestamp Types In Snowflake (By Faysal Shaarani)
Date and Timestamp Types In Snowflake (By Faysal Shaarani)
 
Brand new Date and Time API
Brand new Date and Time APIBrand new Date and Time API
Brand new Date and Time API
 
Brand New Date and Time API
Brand New Date and Time APIBrand New Date and Time API
Brand New Date and Time API
 
Date and Time MomentJS Edition
Date and Time MomentJS EditionDate and Time MomentJS Edition
Date and Time MomentJS Edition
 
Lesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptxLesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptx
 
704 instructional ppt timeand date
704 instructional ppt timeand date704 instructional ppt timeand date
704 instructional ppt timeand date
 
That Conference Date and Time
That Conference Date and TimeThat Conference Date and Time
That Conference Date and Time
 

More from Sualeh Fatehi

More from Sualeh Fatehi (16)

Magic Wheels (1987)
Magic Wheels (1987)Magic Wheels (1987)
Magic Wheels (1987)
 
The Geometry of Stars
The Geometry of StarsThe Geometry of Stars
The Geometry of Stars
 
Blue Moon
Blue MoonBlue Moon
Blue Moon
 
Magic Wheels
Magic WheelsMagic Wheels
Magic Wheels
 
Conversion of Roman Numbers to Hindu-Arabic
Conversion of Roman Numbers to Hindu-ArabicConversion of Roman Numbers to Hindu-Arabic
Conversion of Roman Numbers to Hindu-Arabic
 
X.400
X.400X.400
X.400
 
GFN News
GFN NewsGFN News
GFN News
 
Swedish Rite
Swedish RiteSwedish Rite
Swedish Rite
 
Freemasonry in India
Freemasonry in IndiaFreemasonry in India
Freemasonry in India
 
SchemaCrawler
SchemaCrawlerSchemaCrawler
SchemaCrawler
 
Cubic Insanity
Cubic InsanityCubic Insanity
Cubic Insanity
 
Beyond the Mobius Strip
Beyond the Mobius StripBeyond the Mobius Strip
Beyond the Mobius Strip
 
Tofiks Dodecahedron
Tofiks DodecahedronTofiks Dodecahedron
Tofiks Dodecahedron
 
Pythagorean Triplets
Pythagorean TripletsPythagorean Triplets
Pythagorean Triplets
 
Dissection Of The Dodecahedron
Dissection Of The DodecahedronDissection Of The Dodecahedron
Dissection Of The Dodecahedron
 
The Eleven Holes Puzzle
The Eleven Holes PuzzleThe Eleven Holes Puzzle
The Eleven Holes Puzzle
 

Recently uploaded

My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 

Recently uploaded (20)

My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 

Java 8 Date and Time API

  • 1. Sualeh Fatehi Java 8 Date and Time API This work by Sualeh Fatehi is licensed under a Creative Commons Attribution- NonCommercial 4.0 International License.
  • 2.  Review the current date and time API  Understand date and time concepts  Take a look at the new date and time API Overview
  • 3. Several problems here: 1. Which 12 is for which date field? 2. Month 12 is December, right? No. January. 3. Year 12 is 12 CE, right? Wrong. 1913. 4. Wait - there is a time in a date? 5. More than that, there is a time zone. Problems Getting a Date System.out.println(new Date(12, 12, 12)); // Sun Jan 12 00:00:00 EST 1913
  • 4.  Conceptually an instant, not a date  Properties have random offsets  Some zero-based, like month and hours  Some one-based, like day of the month  Year has an offset of 1900  Mutable, not thread-safe  Not internationalizable  Millisecond granularity  Does not reflect UTC A Sorry Implementation
  • 5.  Date was the work of James Gosling and Arthur van Hoff  Added in JDK 1.0, mostly deprecated in JDK 1.1, never removed  IBM donated Calendar code to Sun Back Story
  • 6. System.out.println(new GregorianCalendar(12, 12, 12)); Revisited Examples java.util.GregorianCalendar[time=?,areFieldsSet=false,areA llFieldsSet=false,lenient=true,zone=sun.util.calendar.Zone Info[id="America/New_York",offset=- 18000000,dstSavings=3600000,useDaylight=true,transitions=2 35,lastRule=java.util.Simpletime zone[id=America/New_York,offset=- 18000000,dstSavings=3600000,useDaylight=true,startYear=0,s tartMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startT ime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1 ,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOf Week=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=12,MONTH=12,WEE K_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=12,DAY_OF_YEAR=?, DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_O F_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_ OFFSET=?]
  • 7. Several problems here: 1. Which 12 is for which date field? 2. Month 12 is December, right? No. January. 3. They got the year right! Almost. 13 CE. 4. Wait - there is a time in a calendar? 5. More than that, there is a time zone. Problems Getting a Date System.out.println(dtFmt.format(new GregorianCalendar(12,12,12).getTime())); // January 12, 0013 12:00:00 AM EST
  • 8.  “Calendar” represents a date, time and time-zone  Defaults to Gregorian calendar  In Thailand only, you get a Buddhist calendar  You can ask specifically ask for a Japanese calendar Calendar
  • 9.  Conceptually an instant, not a calendar  But, can’t create a Calendar from a Date  Can’t format a Calendar  Zero-based offsets  Stores internal state in two different ways  milliseconds from epoch  set of fields  Has bugs and performance issues  Mutable, not thread-safe Not Much Improvement
  • 10.  2002 - Stephen Colebourne starts open source Joda-Time project  2005 - Release of Joda-Time 1.0  2007 - JSR 310, for inclusion in Java  2011 - Release of Joda-Time 2.0  2014 - Finally, the date and time API is in Java 8 Java 8 Date and Time API
  • 11. No problems: 1. ISO 8601 order of fields - year, month, day. 2. Month 12 is December. 3. Year is 12 CE. 4. No time component. 5. No time zone. No Problem Getting a Date System.out.println( LocalDate.of(12, 12, 12)); // 0012-12-12
  • 12. System.out.println( LocalDate.of(13, 13, 13)); Bad Arguments java.time.DateTimeException: Invalid value for MonthOfYear (valid values 1 - 12): 13 at java.time.temporal.ValueRange.checkValidValue(Unknown Source) at java.time.temporal.ChronoField.checkValidValue(Unknown Source) at java.time.LocalDate.of(Unknown Source) …
  • 13. Most importantly, the Java 8 date and time API forces you to think carefully about what you are doing. Concepts // Don’t code like this again Calendar calendar = new GregorianCalendar(); Date date = calendar.getTime();
  • 14.  Reference point to measure time  May be based on religious or political milestones  Divides the timeline into eras  Start of a particular era Epoch
  • 15.  January 0, 0 - MATLAB  January 1, 1 - Symbian, .NET  January 1, 1601 - COBOL, Windows  January 1, 1900 - LISP, SNTP  January 1, 1904 – Old Mac OS  January 1, 1970 - Unix Epoch (Linux, Mac OS X), Java, C, JavaScript, Perl, PHP, Python, Ruby Computer System Epochs
  • 16.  Organizes days for social, religious, commercial or administrative purposes  Names periods like days, weeks, months, and years  Periods may follow cycles of the sun or moon  A date is a specific day in the system  May be based on an epoch Calendar System
  • 17.  GMT is Greenwich Mean Time  Mean solar time at the Royal Observatory in Greenwich  UTC is Coordinated Universal Time  Precisely defined with atomic time  Does not change with seasons  Replaced GMT as reference time scale on 1 January 1972 UTC
  • 18.  International standard for representation of dates and times  Uses the Gregorian calendar system  Ordered from most to least significant: year, month, day, hour, minute  Each date and time value has a fixed number of digits with leading zeros  Uses four-digit year at minimum, YYYY ISO 8601
  • 20.  Machines have one view of time  discrete points corresponding to the smallest measurement possible  a single, ever increasing number  Humans have a different view of time  continuous timelines  calendar systems  arbitrary units like years, months, days, hours  time zones, and daylight savings rules Machine and Human Timelines
  • 21.  Distinguish between machine and human views  Well-defined and clear purpose  Immutable, thread-safe  Reject null and bad arguments early  Extensible, by use of strategy pattern  Fluent interface with chained methods Design Principles
  • 22.  Point on a discretized time-line  Stored to nanosecond resolution  long for seconds since epoch, and  int for nanosecond of second  Convert to any date time field using a Chronology  Use for event time-stamps Instant
  • 23.  An indication of date or time that cannot identify a specific, unique instant  Definition uses fields such as year, month, day of month, and time of day  Commonly used partials, such as LocalDate and LocalTime are available  Others like MonthDay, YearMonth (card expiration?) are also available Partial
  • 24.  Precise length of elapsed time, in nanoseconds  Does not use date-based constructs like years, months, and days  Can be negative, if end is before start Duration
  • 25.  A length of elapsed time  Defined using calendar fields - years, months, and days (not minutes and seconds)  Takes time zones into account for calculation Period
  • 26.  Region with uniform standard time for legal, commercial, social, and political purposes  Some countries use daylight saving time for part of the year  Offset from UTC (UTC-12 to UTC+14)  UTC is sometimes denoted by Z (Zulu)  JDK time zone data is updated with JDK releases Time Zone
  • 27.  Gets the current instant using a time-zone  Use instead of System.currentTimeMillis()  Use an alternate clock for testing Clock public class SomeBean { @Inject private Clock clock; public void process() { LocalDate date = LocalDate.now(clock); ... } }
  • 28.  Pluggable calendar system  Provides access to date and time fields  Built-in  ISO8601 (default): IsoChronology  Chinese: MinguoChronology  Japanese: JapaneseChronology  Thai Buddhist: ThaiBuddhistChronology  Islamic: HijrahChronology Chronology
  • 29.  java.time - instants, durations, dates, times, time zones, periods  java.time.format - formatting and parsing  java.time.temporal - field, unit, or adjustment access to temporals  java.time.zone – support for time zones  java.time.chrono - calendar systems other than ISO-8601 New Packages
  • 30.  LocalDate  ISO 8601 date without time zone and time  Corresponds to SQL DATE type  Example: birthdate or employee hire-date  LocalTime  ISO 8601 time without time zone and date  Corresponds to SQL TIME type  Example: the time that an alarm clock goes off  LocalDateTime  ISO 8601 date and time without time zone  Corresponds to SQL TIMESTAMP type Commonly Used Classes
  • 31. Class or Enum Year Month Day Hours Minutes Nanos Zone Offset Zone ID toString Output Instant ✓ 2013-08-20T15:16:26.355Z LocalDate ✓ ✓ ✓ 2013-08-20 LocalDateTime ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-20T08:16:26.937 ZonedDateTime ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-21T00:16:26.941+09:00[Asia/Tokyo] LocalTime ✓ ✓ ✓ 08:16:26.943 MonthDay ✓ ✓ --08-20 Year ✓ 2013 YearMonth ✓ ✓ 2013-08 Month ✓ AUGUST OffsetDateTime ✓ ✓ ✓ ✓ ✓ ✓ ✓ 2013-08-20T08:16:26.954-07:00 OffsetTime ✓ ✓ ✓ ✓ 08:16:26.957-07:00 Duration ✓ PT20H Period ✓ ✓ ✓ P10D Commonly Used Classes http://docs.oracle.com/javase/tutorial/datetime/iso/overview.html
  • 32.  of - static factory, validates input  from - static factory, converts to instance of target class  get - returns part of the state  is - queries the state  with - immutable copy with elements changed  to - converts to another object type  plus, minus - immutable copy after operation Consistent Operations
  • 33.  Day of week, for example DayOfWeek.SUNDAY  Month , for example LocalDate.of(2014, Month.MAY, 20);  Time units, for example Instant.now().plus(1, ChronoUnit.DAYS)  Other useful constants  LocalTime.MIDNIGHT // 00:00  LocalTime.NOON // 12:00 Staying Constant
  • 34.  Format with a DateTimeFormatter instance  Internationalization is supported  Custom formats can be used, including am/ pm for time Formatting
  • 35.  Parse with a DateTimeFormatter instance  parse(…) methods return a temporal  Use from(…) to convert to a known date or time type Parsing
  • 36. TemporalAdjuster fourMinutesLater = new TemporalAdjuster() { @Override public Temporal adjustInto(Temporal temporal) { return temporal.plus(4, ChronoUnit.MINUTES); } }; LocalTime time = LocalTime.of(12, 0, 0); LocalTime later = time.with(fourMinutesLater); Temporal Adjusters
  • 37. LocalTime time = LocalTime.of(12, 0, 0); time.with(temporal -> temporal.plus(4, ChronoUnit.MINUTES))); Temporal Adjusters Java 8 Style
  • 38.  Strategy for extracting information from temporals  Externalize the process of querying  Examples  get the time zone in a temporal  check if date is February 29 in a leap year  calculate days until your next birthday  TemporalQueries class has implementations of common queries Temporal Queries
  • 39.  Existing date-related APIs can be error- prone and tedious  Separate concepts of computer-related times and human-related times Need to manipulate dates and times? Use Joda-Time or the Java 8 date and time API. Summary
  • 40.  JSR 310: A New Java Date/Time API  Joda-Time  Why JSR-310 isn't Joda-Time  Java 101: The next generation: It's time for a change Resources
  • 41. Code used in this presentation on GitHub: https://github.com/sualeh/java8-timeapi-examples Code