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

Genesis and Overview of Java
Genesis and Overview of Java Genesis and Overview of Java
Genesis and Overview of Java
Ravi_Kant_Sahu
 

What's hot (20)

Modern JS with ES6
Modern JS with ES6Modern JS with ES6
Modern JS with ES6
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
COBOL FOR FRESHER
COBOL FOR FRESHERCOBOL FOR FRESHER
COBOL FOR FRESHER
 
Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Java & J2EE Coding Conventions
Java & J2EE Coding ConventionsJava & J2EE Coding Conventions
Java & J2EE Coding Conventions
 
Xke spring boot
Xke spring bootXke spring boot
Xke spring boot
 
Core Java Tutorials by Mahika Tutorials
Core Java Tutorials by Mahika TutorialsCore Java Tutorials by Mahika Tutorials
Core Java Tutorials by Mahika Tutorials
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Java Presentation For Syntax
Java Presentation For SyntaxJava Presentation For Syntax
Java Presentation For Syntax
 
Java Programming | Java Tutorial For Beginners | Java Training | Edureka
Java Programming | Java Tutorial For Beginners | Java Training | EdurekaJava Programming | Java Tutorial For Beginners | Java Training | Edureka
Java Programming | Java Tutorial For Beginners | Java Training | Edureka
 
[APJ] Common Table Expressions (CTEs) in SQL
[APJ] Common Table Expressions (CTEs) in SQL[APJ] Common Table Expressions (CTEs) in SQL
[APJ] Common Table Expressions (CTEs) in SQL
 
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
Java Tutorial | Java Programming Tutorial | Java Basics | Java Training | Edu...
 
From Java 11 to 17 and beyond.pdf
From Java 11 to 17 and beyond.pdfFrom Java 11 to 17 and beyond.pdf
From Java 11 to 17 and beyond.pdf
 
Genesis and Overview of Java
Genesis and Overview of Java Genesis and Overview of Java
Genesis and Overview of Java
 
Java 8 - Features Overview
Java 8 - Features OverviewJava 8 - Features Overview
Java 8 - Features Overview
 
CORE JAVA
CORE JAVACORE JAVA
CORE JAVA
 
Introduction To Angular's reactive forms
Introduction To Angular's reactive formsIntroduction To Angular's reactive forms
Introduction To Angular's reactive forms
 
Core java concepts
Core java  conceptsCore java  concepts
Core java concepts
 
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | EdurekaWhat Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
What Is Java | Java Tutorial | Java Programming | Learn Java | Edureka
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 

Viewers also liked

Short history of time - Confitura 2013
Short history of time - Confitura 2013Short history of time - Confitura 2013
Short history of time - Confitura 2013
nurkiewicz
 
9781111530532 ppt ch14
9781111530532 ppt ch149781111530532 ppt ch14
9781111530532 ppt ch14
Terry 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
 

Viewers also liked (20)

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
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
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

Date and time manipulation
Date and time manipulationDate and time manipulation
Date and time manipulation
Shahjahan Samoon
 
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)
 

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
 
jkfdlsajfklafj
jkfdlsajfklafjjkfdlsajfklafj
jkfdlsajfklafj
 
doc
docdoc
doc
 
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 time manipulation
Date and time manipulationDate and time manipulation
Date and time manipulation
 
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
 

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

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 

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