SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Brand new
Date and Time API
March 21, 2014
HASUNUMA Kenji

khasunuma@java.net
http://www.coppermine.jp/
Twitter:
Preface
• JSR 310 is a new and improved date and time API
for Java.
• It is based on ISO 8601 standard.
• The reference implementation is called "ThreeTen".
• Specification Leads: Stephen Colebourne, Michael
Nascimento Santos and Roger Riggs.
What is time?

“Time” is described by science approaches and defined by
International Standard (SI) exactly.
Skip
Definition of second (Traditional)
Definition of second (Modern)
PST (Pacific Standard Time)
Offset:-08:00 (Summer:-07:00)
JST (Japan Standard Time)
Offset:+09:00
Skip
Time zones (East 1/2)
Code Name Offset Summer
ECT Europe/Paris +01:00 +02:00
CAT Africa/Harare +02:00 (N/A)
ART Africa/Cairo +02:00 (N/A)
EAT Africa/Addis_Abeba +03:00 (N/A)
NET Asia/Yerevan +04:00 (N/A)
PLT Asia/Karachi +05:00 (N/A)
IST Asia/Koltaka +05:30 (N/A)
BST Asia/Dacca +06:00 (N/A)
Time zones (East 2/2)
Code Name Offset Summer
VST Asia/Ho_Chi_Minh +07:00 (N/A)
CTT Asia/Shanghai +08:00 (N/A)
JST Asia/Tokyo +09:00 (N/A)
ACT Australia/Darwin +09:30 (N/A)
AET Australia/Sydney +11:00 +10:00
SST Pacific/Guadalcanal +11:00 (N/A)
NST Pacific/Auckland +13:00 +12:00
MIT Pacific/Apia +14:00 +13:00
Time zones (West 1/2)
Code Name Offset Summer
BET America/Sao_Paulo -02:00 -03:00
AGT America/Argentina/Buenos_Aires -03:00 (N/A)
CNT America/St_Johns -03:30 -02:30
PRT America/Puerto_Rico -04:00 (N/A)
EST (N/A) -05:00 (N/A)
IET America/Indiana/Indianapolis -05:00 -04:00
Time zones (West 2/2)
Code Name Offset Summer
CST America/Chicago -06:00 -05:00
MST (N/A) -07:00 (N/A)
PNT America/Phoenix -07:00 (N/A)
PST America/Los_Angeles -08:00 -07:00
AST America/Anchorage -09:00 -08:00
HST (N/A) -10:00 (N/A)
ISO 8601

Date elements and interchange formats - Information
interchange - Representation of dates and times
Skip
What’s ISO 8601?
• International standard for representation of dates
and times, using information interchange.
• Based on Gregorian calendar system (1582).
• JIS X 0301 is Japanese translations with remarks
about Japanese chronology.
• ISO 8601 and Unix time are incompatible.

Unix time is basis of java.util.Date, et al.
Representation of time

(w/o Time zone)
• hh:mm:ss e.g. 15:30:45
• hh:mm e.g. 15:30
• hh e.g. 15
• hh:mm:ss.s e.g. 15:30:45.250
Representation of time

(w/Time zone)
• Add suffix based on the offset from UTC
• UTC: ‘Z’ e.g. 06:30:45Z
• Not UTC: +hh:mm or -hh:mm

e.g. 15:30:45+09:00 (JST, Asia/Tokyo)

02:30:45-08:00 (PST, America/Los_Angeles)
Representation of date
• date - it consists with year, month, day and week.
• calendar date YYYY-MM-DD e.g. 2014-03-21
• ordinal date YYYY-DDD e.g. 2014-080
• week date YYYY-Www-D e.g. 2014-W12-5
• Short representations:
• year-month YYYY-MM e.g. 2014-03
• year YYYY e.g. 2014
• century YY e.g. 20
• month-day --MM-DD e.g. --03-21
Definition of day
• a day = 24 hours = 86,400 seconds
• 00:00~24:00 (24:00 is same as next 00:00)
• Exceptions:
• Leap seconds
• Begin and end of summer time
• When the time zone is changed
Definition of month
• a month = 28, 29, 30 or 31 days
1 January 01~31 7 July 01~31
2 February 01~28/29 8 August 01~31
3 March 01~31 9 September 01~30
4 April 01~30 10 October 01~31
5 May 01~31 11 November 01~30
6 June 01~30 12 December 01~31
Definition of year
• a year = approximation days while the orbital period
of Earth (365.242 19 days), 12 months.
• common year = 365 days
• leap year = 366 days
• 0000~9999 (0000~1582 is reserved)
mod 4 mod 100 mod 400 year
Not Zero - - common year
Zero Not Zero - leap year
Zero Zero Not Zero common year
Zero Zero Zero leap year
Definition of week
• a week = 7 days
• 1st week of year = a week
contents the first Thursday
of the year.
• a year contents 52 or 53
weeks.
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
7 Sunday
Origin of week
Representation of date and time
• concat date and time by 'T'.
• YYYY-MM-DDThh:mm:ss[Time zone]
• Alt. YYYY-DDDThh:mm:ss[Time Zone]
• e.g.
2014-03-21T06:30
2014-03-21T15:30:45+09:00
2014-079T02:30:45-08:00
Definition and representation
of duration
• time amount between two time points
• date : nYnMnD e.g. 1Y3M22D
• time : nHnMnS e.g. 9H30M45S
• date and time : nYnMnDTnHnMnS

e.g. 1Y3M22DT9H30M45S
Definition and representation
of period
• range between two dates (adopt also two times)
• two dates : YYYY-MM-DD/YYYY-MM-DD

e.g. 2013-12-31/2014-03-21
• start date and duration : YYYY-MM-DD/PnYnMnD

e.g. 2013-12-31/P1Y3M22D
• end date and duration : PnYnMnD/YYYY-MM-DD

e.g. P1Y3M22D/2013-03-21
• duration : PnYnMnD

e.g. P1Y3M22D
JSR 310

Date and Time API
Skip
JSR 310 : Date and Time API
• Since 2007, Reference Implementation: ThreeTen
• Relational projects:
• ThreeTen-Extra: Features dropped from JDK8, 

i.e. UTC/TAI full support, Coptic chronology, et al.

https://github.com/ThreeTen/threeten-extra
• ThreeTen-Backport: JSR 310 like API for JDK7.

https://github.com/ThreeTen/threetenbp
• Joda-Time: Provides many hints to JSR 310.

http://www.joda.org/joda-time/
Package java.time.*
Package Description Use
java.time Basic classes usually
java.time.format Date and Time Formatter often
java.time.chrono Chronology supports partially
java.time.temporal Low-level API rarely
java.time.zone Low-level API rarely
Date and Time classes
Class Field Time zone ISO 8601 Chrono.
LocalDate Date N/A compatible enable
LocalDateTime Date + Time N/A compatible enable
LocalTime Time N/A compatible N/A
OffsetDateTime Date + Time offset compatible disable
OffsetTime Time offset compatible N/A
ZonedDateTime Date + Time zone id extended enable
Date and Time conversions
Date and Time conversions
Oper. Description
of-
Create from fields.
e.g. LocalDate today = LocalDate.of(2014, 3, 21);
// today.toString() : “2014-03-21”
at-
Expand with fields.
e.g. LocalDateTime current = today.atTime(15:30);
// current.toString() : “2014-03-21T15:30:00”
to-
Truncate fields.
e.g. LocalDate someday = current.toLocalDate();
// someday.toString() : “2014-03-21”
Date and Time operators
Oper. Description
isBefore
isEqual
isAfter
Compare with other date/time.
e.g. LocalDate today = LocalDate.of(2014, 3, 21);
boolean b = today.isAfter(LocalDate.of(2014, 3, 19));
// b == true
plus-
minus-
Add/subtract field value.
e.g. LocalDate tomorrow = today.plusDays(2);
// tomorrow.toString() : “2014-03-23”
isLeapYear
Verify a date is leap year.
e.g. boolean leap = today.isLeapYear();
// leap == false
Date and Time formatting
Method Description
toString()
Format using default formatter.
e.g. String s = today.toString();
// s : “2014-03-21”
format(DateTimeFormatter f)
Format using custom formatter.
e.g. String s = today.format(formatter);
parse(String s)
Parse using default formatter.
e.g. LocalDate d = LocalDate

.parse(“2014-03-21”);
parse(String s,
DateTimeFormatter f)
Parse using custom formatter.
e.g. LocalDate d = LocalDate

.parse(“2014-03-21”, formatter);
Chronology
• Date and Time API supports ISO 8601 and some local
chronology (e.g., Japanese Era, Minguo Era, Thai
Buddhist Era and Hijrah Era).
• ChronoLocalDate and its sub-classes (incl. LocalDate)
support chronology.
• ChronoLocalDateTime<D>/ChronoZonedDateTime<D>
instead of LocalDateTime/ZonedDateTime
• dates/times that have different chronology can convert
by from method each other.
Chronology supports
Chronology Era ChronoLocalDate
IsoChronology IsoEra LocalDate
JapaneseChronology JapaneseEra JapaneseDate
MinguoChronology MinguoEra MinguoDate
ThaiBuddhistChronology ThaiBuddhistEra ThaiBuddhistDate
HijrahChronology HijrahEra HijrahDate
Chronology examples
LocalDate today = LocalDate.of(2014, 3, 21);
System.out.println(today);
System.out.println(JapaneseDate.from(today));
System.out.println(MinguoDate.from(today));
System.out.println(ThaiBuddhistDate.from(today));
System.out.println(HijrahDate.from(today));
2014-03-21
Japanese Heisei 26-03-21
Minguo ROC 103-03-21
ThaiBuddhist BE 2557-03-21
Hijrah-umalqura AH 1435-05-20
DateTimeFormatter
• Provides formats date/time.
• Created by ofPattern method (basic way)

e.g. DateTimeFormatter.ofPattern(“yyyy/MM/dd”)
• Created by DateTimeFormatterBuilder (full control)
• Pre-defined patterns (static fields)
• ISO_LOCAL_DATE // ofPattern(“yyyy-MM-dd”)
• ISO_ORDINAL_DATE // ofPattern(“yyyy-ddd”)
• ISO_WEEK_DATE // ofPattern(“yyyy-Www”)
Chronology and Formatter

e.g. JapaneseDate
pattern display example
"YYYY/MM/dd" 2014/03/21
"Y/M/d" 2014/3/21
"GGGGGyy.MM.dd" H26.03.21
"Gy年M月d日(E)" 平成26年3月21日(金)
External representation

(for Human)
Internal representation

(for Machine)
Instant
• Representation of a time-point.
• The precision is a nano second.
• The epoch is 1970-01-01T00:00:00Z
• Convert from/to LocalDateTime, OffsetDateTime or
ZonedDateTime.
• Convert from/to java.util.Date, which means that
Instant is the only interface to java.util.Date.
Duration and Period
• Representations of period (ISO 8601).
• Period (JSR 310) is a period (ISO 8601) between two
dates and represents as a date-scale.

i.e. format as "P1Y2M3D"
• Duration (JSR 310) is a period (ISO 8601) between
any two temporals and represents as a time-scale.

i.e. format as "PT15H30M45D"
• Attention: those definitions are different from them of
ISO 8601.
Clock and now method
• Provider of the current instant.
• There are some clocks, having relation of zones (incl.
current zone), fixed clock (for testing) and custom.
• By default, it uses the clock of current zone.
• now method (LocalDate, et al.) creates a temporal
instance from a clock. 

e.g. LocalDate.now(); 

LocalDate.now(zoneId); 

LocalDate.now(Clock.fixed(instant, ZoneId.systemDefault);
Examples

More examples:
https://github.com/btnrouge/threetensamples
Skip
// It is assumed to run at March 21, 2014
LocalDate today = LocalDate.new();
!
System.out.println(today);
2014-03-21
LocalDate calendarDate
= LocalDate.of(2014, 3, 21);
LocalDate ordinalDate
= LocalDate.ofYearDays(2014, 80);
LocalDateTime localDateTime
= LocalDateTime.of(2014, 3, 21, 15, 30);
!
System.out.println(calendarDate);
System.out.println(ordinalDate);
System.out.println(localDateTime);
2014-03-21
2014-03-21
2014-03-21T15:30
OffsetDateTime offsetDateTime
= OffsetDateTime.of(2014, 3, 21,
15, 30, 45, 0,
ZoneOffset.ofHours(9));
ZonedDateTime zonedDateTime
= ZonedDateTime.of(2014, 3, 21,
15, 30, 45, 0,
ZoneId.of("Asia/Tokyo"));
!
System.out.println(offsetDateTime);
System.out.println(zonedDateTime);
2014-03-21T15:30:45+09:00
2014-03-21T15:30:45+09:00[Asia/Tokyo]
LocalDate localDate
= LocalDate.of(2014, 3, 21);
LocalDateTime localDateTime0
= localDate.atStartOfDay();
LocalDateTime localDateTime1
= localDate.atTime(15, 30, 45);
OffsetDateTime offsetDateTime
= localDateTime.atOffset(
ZoneOffset.ofHours(9));
!
System.out.println(localDateTime0);
System.out.println(localDateTime1);
System.out.println(offsetDateTime);
2014-03-21T00:00
2014-03-21T15:30:45
2014-03-21T15:30:45+09:00
OffsetDateTime offsetDateTime
= OffsetDateTime.of(2014, 3, 21,
15, 30, 45, 0,
ZoneOffset.ofHours(9));
LocalDate localDate =
offsetDateTime.toLocalDate();
LocalTime localTime =
offsetDateTime.toLocalTime();
!
System.out.println(offsetDateTime);
System.out.println(localDate);
System.out.println(localTime);
2014-03-21T15:30:45+09:00
2014-03-21
15:30:45
LocalDate commonYearsDay
= LocalDate.of(1990, 12, 19);
LocalDate leapYearsDay
= LocalDate.of(1992, 10, 8);
LocalDate centuryDay
= LocalDate.of(2000, 1, 1);
!
System.out.println(
commonYearDay.isLeapYear());
System.out.println(
leapYearDay.isLeap());
System.out.println(
centuryDay.isLeapYear());
false
true
false
LocalDate today
= LocalDate.of(2014, 3, 21);
LocalDate lastWeek
= today.minusWeeks(1L);
LocalDate dayAfterTomorrow
= today.plusDays(2L);
Period period =
lastWeek.until(dayAfterTomorrow);
!
System.out.println(yesterday);
System.out.println(dayAftereTomorrow);
System.out.println(period);
2014-03-20
2014-03-23
P9D
// Convert java.util.Date to LocalDateTime
Date date = new Date();
!
LocalDateTime localDateTime =
LocalDateTime.ofInstant(date.toInstant(),
ZoneId.systemDefault());
// Convert LocalDateTime to java.util.Date
LocalDateTime localDateTime =
LocalDateTime.now();
!
Instant instant = localDateTime.atZone(
ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);
Brand new
Date and Time API
March 21, 2014
HASUNUMA Kenji

khasunuma@java.net

http://www.coppermine.jp/

Twitter: @khasunuma

Weitere ähnliche Inhalte

Was ist angesagt? (9)

What Year Is It: things you shouldn't do with timezones
What Year Is It: things you shouldn't do with timezonesWhat Year Is It: things you shouldn't do with timezones
What Year Is It: things you shouldn't do with timezones
 
Sol59
Sol59Sol59
Sol59
 
Bit calculations
Bit calculationsBit calculations
Bit calculations
 
Building Structure calculation
Building Structure calculationBuilding Structure calculation
Building Structure calculation
 
Variable mass system
Variable mass systemVariable mass system
Variable mass system
 
Ejercicio de mecanica
Ejercicio de mecanicaEjercicio de mecanica
Ejercicio de mecanica
 
Lecture 11.1 : heaps
Lecture 11.1 :  heapsLecture 11.1 :  heaps
Lecture 11.1 : heaps
 
Multi-Jet Generation -status report-
Multi-Jet Generation -status report-Multi-Jet Generation -status report-
Multi-Jet Generation -status report-
 
5th heat transfer class, tuesday, january 28, 2014
5th heat transfer class, tuesday, january 28, 20145th heat transfer class, tuesday, january 28, 2014
5th heat transfer class, tuesday, january 28, 2014
 

Ähnlich wie Brand New Date and Time API

Date and time manipulation
Date and time manipulationDate and time manipulation
Date and time manipulation
Shahjahan Samoon
 
Advanced Date/Time Handling with PHP
Advanced Date/Time Handling with PHPAdvanced Date/Time Handling with PHP
Advanced Date/Time Handling with PHP
Anis Berejeb
 

Ähnlich wie Brand New Date and Time API (20)

Introduction to Date and Time API 3
Introduction to Date and Time API 3Introduction to Date and Time API 3
Introduction to Date and Time API 3
 
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
 
Date and time manipulation
Date and time manipulationDate and time manipulation
Date and time manipulation
 
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
 
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
 
17 ruby date time
17 ruby date time17 ruby date time
17 ruby date time
 
jkfdlsajfklafj
jkfdlsajfklafjjkfdlsajfklafj
jkfdlsajfklafj
 
doc
docdoc
doc
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
MomentJS at SeattleJS
MomentJS at SeattleJSMomentJS at SeattleJS
MomentJS at SeattleJS
 
Date and Time MomentJS Edition
Date and Time MomentJS EditionDate and Time MomentJS Edition
Date and Time MomentJS Edition
 
That Conference Date and Time
That Conference Date and TimeThat Conference Date and Time
That Conference Date and Time
 
Fun times with ruby
Fun times with rubyFun times with ruby
Fun times with ruby
 
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
Péhápkaři v Pecce: Za hranicemi DateTime – Jiří Pudil – 16. 10. 2019
 
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
 
Java 8 date & time api
Java 8 date & time apiJava 8 date & time api
Java 8 date & time api
 
Php date &amp; time functions
Php date &amp; time functionsPhp date &amp; time functions
Php date &amp; time functions
 
10. timestamp
10. timestamp10. timestamp
10. timestamp
 
Advanced Date/Time Handling with PHP
Advanced Date/Time Handling with PHPAdvanced Date/Time Handling with PHP
Advanced Date/Time Handling with PHP
 

Mehr von Kenji HASUNUMA

Mehr von Kenji HASUNUMA (13)

How to adapt MicroProfile API for generic Web applications
How to adapt MicroProfile API for generic Web applicationsHow to adapt MicroProfile API for generic Web applications
How to adapt MicroProfile API for generic Web applications
 
Life of our small product
Life of our small productLife of our small product
Life of our small product
 
Jakarta EE: The First Parts
Jakarta EE: The First PartsJakarta EE: The First Parts
Jakarta EE: The First Parts
 
Introduction to MicroProfile Metrics
Introduction to MicroProfile MetricsIntroduction to MicroProfile Metrics
Introduction to MicroProfile Metrics
 
Introduction to JCA and MDB
Introduction to JCA and MDBIntroduction to JCA and MDB
Introduction to JCA and MDB
 
Basic method for Java EE Web Profile
Basic method for Java EE Web ProfileBasic method for Java EE Web Profile
Basic method for Java EE Web Profile
 
Introduction to JavaFX Dialogs
Introduction to JavaFX DialogsIntroduction to JavaFX Dialogs
Introduction to JavaFX Dialogs
 
Virtualization Fundamental
Virtualization FundamentalVirtualization Fundamental
Virtualization Fundamental
 
JLS Myths - If-then-else statement -
JLS Myths - If-then-else statement -JLS Myths - If-then-else statement -
JLS Myths - If-then-else statement -
 
Fundamental Java
Fundamental JavaFundamental Java
Fundamental Java
 
Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2Collections Framework Beginners Guide 2
Collections Framework Beginners Guide 2
 
Introduction to Date and Time API 2
Introduction to Date and Time API 2Introduction to Date and Time API 2
Introduction to Date and Time API 2
 
Introduction to Date and Time API
Introduction to Date and Time APIIntroduction to Date and Time API
Introduction to Date and Time API
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Kürzlich hochgeladen (20)

MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 

Brand New Date and Time API

  • 1. Brand new Date and Time API March 21, 2014 HASUNUMA Kenji khasunuma@java.net http://www.coppermine.jp/ Twitter:
  • 2. Preface • JSR 310 is a new and improved date and time API for Java. • It is based on ISO 8601 standard. • The reference implementation is called "ThreeTen". • Specification Leads: Stephen Colebourne, Michael Nascimento Santos and Roger Riggs.
  • 3. What is time? “Time” is described by science approaches and defined by International Standard (SI) exactly. Skip
  • 4.
  • 5. Definition of second (Traditional)
  • 7.
  • 8.
  • 9.
  • 10. PST (Pacific Standard Time) Offset:-08:00 (Summer:-07:00) JST (Japan Standard Time) Offset:+09:00 Skip
  • 11. Time zones (East 1/2) Code Name Offset Summer ECT Europe/Paris +01:00 +02:00 CAT Africa/Harare +02:00 (N/A) ART Africa/Cairo +02:00 (N/A) EAT Africa/Addis_Abeba +03:00 (N/A) NET Asia/Yerevan +04:00 (N/A) PLT Asia/Karachi +05:00 (N/A) IST Asia/Koltaka +05:30 (N/A) BST Asia/Dacca +06:00 (N/A)
  • 12. Time zones (East 2/2) Code Name Offset Summer VST Asia/Ho_Chi_Minh +07:00 (N/A) CTT Asia/Shanghai +08:00 (N/A) JST Asia/Tokyo +09:00 (N/A) ACT Australia/Darwin +09:30 (N/A) AET Australia/Sydney +11:00 +10:00 SST Pacific/Guadalcanal +11:00 (N/A) NST Pacific/Auckland +13:00 +12:00 MIT Pacific/Apia +14:00 +13:00
  • 13. Time zones (West 1/2) Code Name Offset Summer BET America/Sao_Paulo -02:00 -03:00 AGT America/Argentina/Buenos_Aires -03:00 (N/A) CNT America/St_Johns -03:30 -02:30 PRT America/Puerto_Rico -04:00 (N/A) EST (N/A) -05:00 (N/A) IET America/Indiana/Indianapolis -05:00 -04:00
  • 14. Time zones (West 2/2) Code Name Offset Summer CST America/Chicago -06:00 -05:00 MST (N/A) -07:00 (N/A) PNT America/Phoenix -07:00 (N/A) PST America/Los_Angeles -08:00 -07:00 AST America/Anchorage -09:00 -08:00 HST (N/A) -10:00 (N/A)
  • 15. ISO 8601 Date elements and interchange formats - Information interchange - Representation of dates and times Skip
  • 16. What’s ISO 8601? • International standard for representation of dates and times, using information interchange. • Based on Gregorian calendar system (1582). • JIS X 0301 is Japanese translations with remarks about Japanese chronology. • ISO 8601 and Unix time are incompatible.
 Unix time is basis of java.util.Date, et al.
  • 17. Representation of time (w/o Time zone) • hh:mm:ss e.g. 15:30:45 • hh:mm e.g. 15:30 • hh e.g. 15 • hh:mm:ss.s e.g. 15:30:45.250
  • 18. Representation of time (w/Time zone) • Add suffix based on the offset from UTC • UTC: ‘Z’ e.g. 06:30:45Z • Not UTC: +hh:mm or -hh:mm
 e.g. 15:30:45+09:00 (JST, Asia/Tokyo)
 02:30:45-08:00 (PST, America/Los_Angeles)
  • 19. Representation of date • date - it consists with year, month, day and week. • calendar date YYYY-MM-DD e.g. 2014-03-21 • ordinal date YYYY-DDD e.g. 2014-080 • week date YYYY-Www-D e.g. 2014-W12-5 • Short representations: • year-month YYYY-MM e.g. 2014-03 • year YYYY e.g. 2014 • century YY e.g. 20 • month-day --MM-DD e.g. --03-21
  • 20. Definition of day • a day = 24 hours = 86,400 seconds • 00:00~24:00 (24:00 is same as next 00:00) • Exceptions: • Leap seconds • Begin and end of summer time • When the time zone is changed
  • 21. Definition of month • a month = 28, 29, 30 or 31 days 1 January 01~31 7 July 01~31 2 February 01~28/29 8 August 01~31 3 March 01~31 9 September 01~30 4 April 01~30 10 October 01~31 5 May 01~31 11 November 01~30 6 June 01~30 12 December 01~31
  • 22. Definition of year • a year = approximation days while the orbital period of Earth (365.242 19 days), 12 months. • common year = 365 days • leap year = 366 days • 0000~9999 (0000~1582 is reserved) mod 4 mod 100 mod 400 year Not Zero - - common year Zero Not Zero - leap year Zero Zero Not Zero common year Zero Zero Zero leap year
  • 23. Definition of week • a week = 7 days • 1st week of year = a week contents the first Thursday of the year. • a year contents 52 or 53 weeks. 1 Monday 2 Tuesday 3 Wednesday 4 Thursday 5 Friday 6 Saturday 7 Sunday
  • 25. Representation of date and time • concat date and time by 'T'. • YYYY-MM-DDThh:mm:ss[Time zone] • Alt. YYYY-DDDThh:mm:ss[Time Zone] • e.g. 2014-03-21T06:30 2014-03-21T15:30:45+09:00 2014-079T02:30:45-08:00
  • 26. Definition and representation of duration • time amount between two time points • date : nYnMnD e.g. 1Y3M22D • time : nHnMnS e.g. 9H30M45S • date and time : nYnMnDTnHnMnS
 e.g. 1Y3M22DT9H30M45S
  • 27. Definition and representation of period • range between two dates (adopt also two times) • two dates : YYYY-MM-DD/YYYY-MM-DD
 e.g. 2013-12-31/2014-03-21 • start date and duration : YYYY-MM-DD/PnYnMnD
 e.g. 2013-12-31/P1Y3M22D • end date and duration : PnYnMnD/YYYY-MM-DD
 e.g. P1Y3M22D/2013-03-21 • duration : PnYnMnD
 e.g. P1Y3M22D
  • 28. JSR 310 Date and Time API Skip
  • 29. JSR 310 : Date and Time API • Since 2007, Reference Implementation: ThreeTen • Relational projects: • ThreeTen-Extra: Features dropped from JDK8, 
 i.e. UTC/TAI full support, Coptic chronology, et al.
 https://github.com/ThreeTen/threeten-extra • ThreeTen-Backport: JSR 310 like API for JDK7.
 https://github.com/ThreeTen/threetenbp • Joda-Time: Provides many hints to JSR 310.
 http://www.joda.org/joda-time/
  • 30. Package java.time.* Package Description Use java.time Basic classes usually java.time.format Date and Time Formatter often java.time.chrono Chronology supports partially java.time.temporal Low-level API rarely java.time.zone Low-level API rarely
  • 31. Date and Time classes Class Field Time zone ISO 8601 Chrono. LocalDate Date N/A compatible enable LocalDateTime Date + Time N/A compatible enable LocalTime Time N/A compatible N/A OffsetDateTime Date + Time offset compatible disable OffsetTime Time offset compatible N/A ZonedDateTime Date + Time zone id extended enable
  • 32. Date and Time conversions
  • 33. Date and Time conversions Oper. Description of- Create from fields. e.g. LocalDate today = LocalDate.of(2014, 3, 21); // today.toString() : “2014-03-21” at- Expand with fields. e.g. LocalDateTime current = today.atTime(15:30); // current.toString() : “2014-03-21T15:30:00” to- Truncate fields. e.g. LocalDate someday = current.toLocalDate(); // someday.toString() : “2014-03-21”
  • 34. Date and Time operators Oper. Description isBefore isEqual isAfter Compare with other date/time. e.g. LocalDate today = LocalDate.of(2014, 3, 21); boolean b = today.isAfter(LocalDate.of(2014, 3, 19)); // b == true plus- minus- Add/subtract field value. e.g. LocalDate tomorrow = today.plusDays(2); // tomorrow.toString() : “2014-03-23” isLeapYear Verify a date is leap year. e.g. boolean leap = today.isLeapYear(); // leap == false
  • 35. Date and Time formatting Method Description toString() Format using default formatter. e.g. String s = today.toString(); // s : “2014-03-21” format(DateTimeFormatter f) Format using custom formatter. e.g. String s = today.format(formatter); parse(String s) Parse using default formatter. e.g. LocalDate d = LocalDate
 .parse(“2014-03-21”); parse(String s, DateTimeFormatter f) Parse using custom formatter. e.g. LocalDate d = LocalDate
 .parse(“2014-03-21”, formatter);
  • 36. Chronology • Date and Time API supports ISO 8601 and some local chronology (e.g., Japanese Era, Minguo Era, Thai Buddhist Era and Hijrah Era). • ChronoLocalDate and its sub-classes (incl. LocalDate) support chronology. • ChronoLocalDateTime<D>/ChronoZonedDateTime<D> instead of LocalDateTime/ZonedDateTime • dates/times that have different chronology can convert by from method each other.
  • 37. Chronology supports Chronology Era ChronoLocalDate IsoChronology IsoEra LocalDate JapaneseChronology JapaneseEra JapaneseDate MinguoChronology MinguoEra MinguoDate ThaiBuddhistChronology ThaiBuddhistEra ThaiBuddhistDate HijrahChronology HijrahEra HijrahDate
  • 38. Chronology examples LocalDate today = LocalDate.of(2014, 3, 21); System.out.println(today); System.out.println(JapaneseDate.from(today)); System.out.println(MinguoDate.from(today)); System.out.println(ThaiBuddhistDate.from(today)); System.out.println(HijrahDate.from(today)); 2014-03-21 Japanese Heisei 26-03-21 Minguo ROC 103-03-21 ThaiBuddhist BE 2557-03-21 Hijrah-umalqura AH 1435-05-20
  • 39. DateTimeFormatter • Provides formats date/time. • Created by ofPattern method (basic way)
 e.g. DateTimeFormatter.ofPattern(“yyyy/MM/dd”) • Created by DateTimeFormatterBuilder (full control) • Pre-defined patterns (static fields) • ISO_LOCAL_DATE // ofPattern(“yyyy-MM-dd”) • ISO_ORDINAL_DATE // ofPattern(“yyyy-ddd”) • ISO_WEEK_DATE // ofPattern(“yyyy-Www”)
  • 40. Chronology and Formatter e.g. JapaneseDate pattern display example "YYYY/MM/dd" 2014/03/21 "Y/M/d" 2014/3/21 "GGGGGyy.MM.dd" H26.03.21 "Gy年M月d日(E)" 平成26年3月21日(金)
  • 43. Instant • Representation of a time-point. • The precision is a nano second. • The epoch is 1970-01-01T00:00:00Z • Convert from/to LocalDateTime, OffsetDateTime or ZonedDateTime. • Convert from/to java.util.Date, which means that Instant is the only interface to java.util.Date.
  • 44. Duration and Period • Representations of period (ISO 8601). • Period (JSR 310) is a period (ISO 8601) between two dates and represents as a date-scale.
 i.e. format as "P1Y2M3D" • Duration (JSR 310) is a period (ISO 8601) between any two temporals and represents as a time-scale.
 i.e. format as "PT15H30M45D" • Attention: those definitions are different from them of ISO 8601.
  • 45. Clock and now method • Provider of the current instant. • There are some clocks, having relation of zones (incl. current zone), fixed clock (for testing) and custom. • By default, it uses the clock of current zone. • now method (LocalDate, et al.) creates a temporal instance from a clock. 
 e.g. LocalDate.now(); 
 LocalDate.now(zoneId); 
 LocalDate.now(Clock.fixed(instant, ZoneId.systemDefault);
  • 47. // It is assumed to run at March 21, 2014 LocalDate today = LocalDate.new(); ! System.out.println(today); 2014-03-21
  • 48. LocalDate calendarDate = LocalDate.of(2014, 3, 21); LocalDate ordinalDate = LocalDate.ofYearDays(2014, 80); LocalDateTime localDateTime = LocalDateTime.of(2014, 3, 21, 15, 30); ! System.out.println(calendarDate); System.out.println(ordinalDate); System.out.println(localDateTime); 2014-03-21 2014-03-21 2014-03-21T15:30
  • 49. OffsetDateTime offsetDateTime = OffsetDateTime.of(2014, 3, 21, 15, 30, 45, 0, ZoneOffset.ofHours(9)); ZonedDateTime zonedDateTime = ZonedDateTime.of(2014, 3, 21, 15, 30, 45, 0, ZoneId.of("Asia/Tokyo")); ! System.out.println(offsetDateTime); System.out.println(zonedDateTime); 2014-03-21T15:30:45+09:00 2014-03-21T15:30:45+09:00[Asia/Tokyo]
  • 50. LocalDate localDate = LocalDate.of(2014, 3, 21); LocalDateTime localDateTime0 = localDate.atStartOfDay(); LocalDateTime localDateTime1 = localDate.atTime(15, 30, 45); OffsetDateTime offsetDateTime = localDateTime.atOffset( ZoneOffset.ofHours(9)); ! System.out.println(localDateTime0); System.out.println(localDateTime1); System.out.println(offsetDateTime); 2014-03-21T00:00 2014-03-21T15:30:45 2014-03-21T15:30:45+09:00
  • 51. OffsetDateTime offsetDateTime = OffsetDateTime.of(2014, 3, 21, 15, 30, 45, 0, ZoneOffset.ofHours(9)); LocalDate localDate = offsetDateTime.toLocalDate(); LocalTime localTime = offsetDateTime.toLocalTime(); ! System.out.println(offsetDateTime); System.out.println(localDate); System.out.println(localTime); 2014-03-21T15:30:45+09:00 2014-03-21 15:30:45
  • 52. LocalDate commonYearsDay = LocalDate.of(1990, 12, 19); LocalDate leapYearsDay = LocalDate.of(1992, 10, 8); LocalDate centuryDay = LocalDate.of(2000, 1, 1); ! System.out.println( commonYearDay.isLeapYear()); System.out.println( leapYearDay.isLeap()); System.out.println( centuryDay.isLeapYear()); false true false
  • 53. LocalDate today = LocalDate.of(2014, 3, 21); LocalDate lastWeek = today.minusWeeks(1L); LocalDate dayAfterTomorrow = today.plusDays(2L); Period period = lastWeek.until(dayAfterTomorrow); ! System.out.println(yesterday); System.out.println(dayAftereTomorrow); System.out.println(period); 2014-03-20 2014-03-23 P9D
  • 54. // Convert java.util.Date to LocalDateTime Date date = new Date(); ! LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); // Convert LocalDateTime to java.util.Date LocalDateTime localDateTime = LocalDateTime.now(); ! Instant instant = localDateTime.atZone( ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant);
  • 55. Brand new Date and Time API March 21, 2014 HASUNUMA Kenji khasunuma@java.net http://www.coppermine.jp/ Twitter: @khasunuma