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

Agile and ATDD the perfect couple
Agile and ATDD the perfect coupleAgile and ATDD the perfect couple
Agile and ATDD the perfect couple
Stephen Tucker
 

What's hot (20)

C# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoringC# coding standards, good programming principles & refactoring
C# coding standards, good programming principles & refactoring
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Introduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed ShreefIntroduction to TDD (Test Driven development) - Ahmed Shreef
Introduction to TDD (Test Driven development) - Ahmed Shreef
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
 
interface in c#
interface in c#interface in c#
interface in c#
 
UI controls in Android
UI controls in Android UI controls in Android
UI controls in Android
 
ISTQB Foundation - Chapter 2
ISTQB Foundation - Chapter 2ISTQB Foundation - Chapter 2
ISTQB Foundation - Chapter 2
 
Formal Specification Ian Sommerville 9th Edition
Formal Specification Ian Sommerville 9th EditionFormal Specification Ian Sommerville 9th Edition
Formal Specification Ian Sommerville 9th Edition
 
Introduction to java 8 stream api
Introduction to java 8 stream apiIntroduction to java 8 stream api
Introduction to java 8 stream api
 
Methods in C#
Methods in C#Methods in C#
Methods in C#
 
Java arrays
Java arraysJava arrays
Java arrays
 
Constructor in java
Constructor in javaConstructor in java
Constructor in java
 
SQL Server Stored procedures
SQL Server Stored proceduresSQL Server Stored procedures
SQL Server Stored procedures
 
Agile and ATDD the perfect couple
Agile and ATDD the perfect coupleAgile and ATDD the perfect couple
Agile and ATDD the perfect couple
 
C# Arrays
C# ArraysC# Arrays
C# Arrays
 
TDD - Agile
TDD - Agile TDD - Agile
TDD - Agile
 
Swing and AWT in java
Swing and AWT in javaSwing and AWT in java
Swing and AWT in java
 
String, string builder, string buffer
String, string builder, string bufferString, string builder, string buffer
String, string builder, string buffer
 
Dr. Rajeshree Khande :Introduction to Java AWT
Dr. Rajeshree Khande :Introduction to Java AWTDr. Rajeshree Khande :Introduction to Java AWT
Dr. Rajeshree Khande :Introduction to Java AWT
 
Unit Testing (C#)
Unit Testing (C#)Unit Testing (C#)
Unit Testing (C#)
 

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
 
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
 
Get into Functional Programming with Clojure
Get into Functional Programming with ClojureGet into Functional Programming with Clojure
Get into Functional Programming with Clojure
 

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

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
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
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

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