SlideShare uma empresa Scribd logo
1 de 37
ZombieTime – JSR 310 for the Undead
Stephen Chin (@steveonjava)
Java Technology Evangelist
JavaOne Conference Chair
https://www.flickr.com/photos/philippeleroyer/4071842319/
We just want to fit in
3
https://www.flickr.com/photos/moira_fee/5632351014/
But humans are scared of us!
4
Is it just because we eat brains?
https://www.flickr.com/photos/dwilliss/7861599590/
5
https://www.flickr.com/photos/jeepersmedia/11883875415/
They quarantine us…
6
https://www.flickr.com/photos/nichpics/10628256503/
And attack us with weapons…
But when it is us vs. them…
https://www.flickr.com/photos/icedsoul/4511648609/in/photostream/
8
Humans don't stand a chance!
https://www.flickr.com/photos/icedsoul/4470494133/
JSR 310, a New Weapon Against the Humans!
• Our researchers have come up
with a new weapon against the
humans!
– Modern API – Zombies type slow, so
we need a fluent API with easy
conversions
– Thread safe – Don't get caught in a
deadlock with armed humans!
– Simplified Time Zone Handling –
Coordinated global attacks!
9https://www.flickr.com/photos/soul_stealer/8249718101/
Stephen Colebourne
Roger Riggs
Don't repeat this failure…
• // hit the humans while they are celebrating!
• Date attackDate = new Date(2013, 12, 25);
10
In the year 3913
https://www.flickr.com/photos/frogdna/6948427148/
+1900
0-based
(No Range
Checking!)
11
Why are we still using
escalators 2000 years in
the future?
I think we are
surrounded…
I hope you took your
Zombie shot, junior.
January 25th, 3914 : Failed Zombie Trooper Invasion
https://www.flickr.com/photos/starwarsblog/516181007/
ZombieTime – Undead Trainer for JSR 310
12
Basic Concepts
• LocalDate, LocalTime, LocalDateTime
– Represents a calendar date, time, or both
• Instant
– Amount of time since the epoch – ideal for timestamps and calculations
• Period
– A span of time between two dates (goes well with LocalDateTime)
• Duration
– A precise span of time (goes well with Instants)
13
Creating Dates and Times
• Now
– LocalDate.now()
• Static
– LocalDate.of(2013, Month.DECEMBER, 25) // Use the enums!
– LocalTime.of(11, 30, 5, 999_999_999) // Time to go to work…
– LocalDateTime.of(2013, Month.DECEMBER, 25, 11, 30, 5, 999_999_999) // Even on
Christmas
• Parsing
– LocalDate.parse()
• Conversion
– new Date().toInstant()
– Calendar.getInstance().toInstant()
14
PixelatedClock
Timeline clockTimeline = new Timeline(
new KeyFrame(Duration.millis(1),
actionEvent -> {
LocalTime now = LocalTime.now();
}));
15
16
Formatting Dates and Times
• Constants
– DateTimeFormatter.BASIC_ISO_DATE // '2011-12-03+01:00'
– DateTimeFormatter.ISO_TIME // '10:15:30+01:00'
– DateTimeFormatter.ISO_DATE_TIME // '2011-12-03T10:15:30+01:00[Europe/Paris]'
– DateTimeFormatter.ISO_WEEK_DATE // 2012-W48-6'
• Localized Formatters
– DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)
• Strings
– date.toString("d MMM uuuu") // '25 Dec 2014'
• Formatters are immutable and thread-safe for reuse!
17
Localized PixelatedClock
DateTimeFormatter clockFormat =
DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
Timeline clockTimeline = new Timeline(
new KeyFrame(Duration.millis(1),
actionEvent -> {
setText(now.format(clockFormat));
}));
18
19
20
21
https://www.flickr.com/photos/rosenwald/4534092922/
I HATE SUNBURN!
Using LocalTime/LocalDate
• Comparing Times/Dates:
– time.isBefore(LocalTime.NOON) // before noon
– date.isAfter(LocalDate.ofYearDay(2014, 365 / 2)) // appx. halfway through the year
• Year Info:
– date.getYear()
– date.getDayOfYear()
– date.lengthOfYear()
– date.isLeapYear()
• Time Info:
– time.getHour() / time.getMinute() / time.getSecond() / time.getNano()
22
Hide from the sunlight!
public BooleanProperty isNight = new
SimpleBooleanProperty();
isNight.setValue(now.isAfter(LocalTime.of(6, 0)) &&
now.isBefore(LocalTime.of(19, 0)));
underground.bind(Main.pixelatedClock.isNight.not());
23
24
Let's Add Some Villagers!
children.add(new SpriteView.Fred(new Location(8, 2)));
children.add(new SpriteView.Sam(new Location(9, 4)));
children.add(new SpriteView.Ted(new Location(7, 6)));
children.add(new SpriteView.Sarah(new Location(5, 4)));
children.add(new SpriteView.Jenn(new Location(6, 5)));
25
26
Ouch! Don't step
on me
Using Time Zones
Creating ZoneIds:
• zoneId = ZoneId.of("Europe/Paris");
• zoneId = ZoneId.of(ZoneId.SHORT_IDS.get("EST"));
• zoneId = ZoneOffset.ofHours(-8);
Using ZoneIds:
• dateTime.now(zoneId);
• dateTime.atZone(zoneId);
• Clock.system(zoneId);
27
Make it Night!
ZoneId zoneId = ZoneId.of("Europe/London");
LocalTime now = LocalTime.now(zoneId);
28
Make it Night! (with a clock)
ZoneId zone = ZoneId.of("Europe/London");
Clock clock = Clock.system(zone);
LocalTime now = LocalTime.now(clock);
29
30
Wait!!! I just want
your brains…
Temporal Adjusters
• Predefined adjustors for common cases
– First or last day of month
• date.with(TemporalAdjusters.firstDayOfMonth())
– First or last day of year
• date.with(TemporalAdjusters.firstDayOfNextYear())
– Last Friday of the month
• date.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY))
• Custom adjusters for your own business logic
31
Friday 13th TimeAdjuster
TemporalAdjuster friday13Adjuster = temporal -> {
if (temporal.get(ChronoField.DAY_OF_MONTH) > 13) temporal =
temporal.plus(1, ChronoUnit.MONTHS);
temporal = temporal.with(ChronoField.DAY_OF_MONTH, 13);
System.out.println("temporal = " + temporal);
while (temporal.get(ChronoField.DAY_OF_WEEK) !=
DayOfWeek.FRIDAY.getValue()) {
temporal = temporal.plus(1, ChronoUnit.MONTHS);
System.out.println("temporal = " + temporal);
}
return temporal;
};
32
Zombified picture here…
33
34
https://www.flickr.com/photos/s1mone/1833002341
Stephen Chin
tweet: @steveonjava
blog: http://steveonjava.com
nighthacking.com
Real Geeks
Live Hacking
NightHacking Tour
Safe Harbor Statement
The preceding is intended to outline our general product direction. It is intended for
information purposes only, and may not be incorporated into any contract. It is not a
commitment to deliver any material, code, or functionality, and should not be relied upon
in making purchasing decisions. The development, release, and timing of any features or
functionality described for Oracle’s products remains at the sole discretion of Oracle.
36
Zombie Time - JSR 310 for the Undead

Mais conteúdo relacionado

Destaque

Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic ShowStephen Chin
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Stephen Chin
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the CloudStephen Chin
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageHacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageStephen Chin
 
Raspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionRaspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionStephen Chin
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleStephen Chin
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and DevicesStephen Chin
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)Stephen Chin
 
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Stephen Chin
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Stephen Chin
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids WorkshopStephen Chin
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosStephen Chin
 
Devoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopDevoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopStephen Chin
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopStephen Chin
 

Destaque (14)

Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic Show
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
JavaFX and Scala in the Cloud
JavaFX and Scala in the CloudJavaFX and Scala in the Cloud
JavaFX and Scala in the Cloud
 
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and VisageHacking JavaFX with Groovy, Clojure, Scala, and Visage
Hacking JavaFX with Groovy, Clojure, Scala, and Visage
 
Raspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionRaspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch Version
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming Console
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and Devices
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)
 
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids Workshop
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and Legos
 
Devoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopDevoxx4Kids NAO Workshop
Devoxx4Kids NAO Workshop
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego Workshop
 

Semelhante a Zombie Time - JSR 310 for the Undead

Date object.pptx date and object v
Date object.pptx date and object        vDate object.pptx date and object        v
Date object.pptx date and object v22x026
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4Kenji HASUNUMA
 
Introduction to Date and Time API 4
Introduction to Date and Time API 4Introduction to Date and Time API 4
Introduction to Date and Time API 4Kenji HASUNUMA
 
Data Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing ItData Wrangling: Working with Date / Time Data and Visualizing It
Data Wrangling: Working with Date / Time Data and Visualizing Itkanaugust
 
Introduction to Date and Time API 3
Introduction to Date and Time API 3Introduction to Date and Time API 3
Introduction to Date and Time API 3Kenji HASUNUMA
 
JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8JSR 310. New Date API in Java 8
JSR 310. New Date API in Java 8Serhii Kartashov
 
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 3Kenji HASUNUMA
 
Lesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptxLesson 05 - Time in Distrributed System.pptx
Lesson 05 - Time in Distrributed System.pptxLagamaPasala
 
Date and Time MomentJS Edition
Date and Time MomentJS EditionDate and Time MomentJS Edition
Date and Time MomentJS EditionMaggie Pint
 
Sensors Aren't Enough
Sensors Aren't EnoughSensors Aren't Enough
Sensors Aren't EnoughC4Media
 
That Conference Date and Time
That Conference Date and TimeThat Conference Date and Time
That Conference Date and TimeMaggie Pint
 
05 Java Language And OOP Part V
05 Java Language And OOP Part V05 Java Language And OOP Part V
05 Java Language And OOP Part VHari Christian
 
Date and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesDate and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesMaggie Pint
 
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 timezonesAram Dulyan
 
Chapter ii(coding)
Chapter ii(coding)Chapter ii(coding)
Chapter ii(coding)Chhom Karath
 
A JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeA JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeDaniel Sobral
 
From the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepFrom the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepIgalia
 

Semelhante a Zombie Time - JSR 310 for the Undead (20)

Date object.pptx date and object v
Date object.pptx date and object        vDate object.pptx date and object        v
Date object.pptx date and object v
 
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
 
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 3
Introduction to Date and Time API 3Introduction to Date and Time API 3
Introduction to Date and Time API 3
 
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
 
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
 
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
 
Date and Time MomentJS Edition
Date and Time MomentJS EditionDate and Time MomentJS Edition
Date and Time MomentJS Edition
 
Sensors Aren't Enough
Sensors Aren't EnoughSensors Aren't Enough
Sensors Aren't Enough
 
That Conference Date and Time
That Conference Date and TimeThat Conference Date and Time
That Conference Date and Time
 
05 Java Language And OOP Part V
05 Java Language And OOP Part V05 Java Language And OOP Part V
05 Java Language And OOP Part V
 
Date and Time Odds Ends Oddities
Date and Time Odds Ends OdditiesDate and Time Odds Ends Oddities
Date and Time Odds Ends Oddities
 
WEB222-lecture-4.pptx
WEB222-lecture-4.pptxWEB222-lecture-4.pptx
WEB222-lecture-4.pptx
 
Java 8 Date and Time API
Java 8 Date and Time APIJava 8 Date and Time API
Java 8 Date and Time API
 
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
 
Fun times with ruby
Fun times with rubyFun times with ruby
Fun times with ruby
 
Chapter ii(coding)
Chapter ii(coding)Chapter ii(coding)
Chapter ii(coding)
 
A JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeA JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA Time
 
From the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by StepFrom the proposal to ECMAScript – Step by Step
From the proposal to ECMAScript – Step by Step
 

Mais de Stephen Chin

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2Stephen Chin
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java CommunityStephen Chin
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideStephen Chin
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java DevelopersStephen Chin
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCStephen Chin
 
LUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingLUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingStephen Chin
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Stephen Chin
 
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)Stephen Chin
 
JavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkJavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkStephen Chin
 

Mais de Stephen Chin (9)

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive Guide
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java Developers
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJC
 
LUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi HackingLUGOD Raspberry Pi Hacking
LUGOD Raspberry Pi Hacking
 
Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5Moving to the Client - JavaFX and HTML5
Moving to the Client - JavaFX and HTML5
 
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
JavaFX 2 - A Java Developer's Guide (San Antonio JUG Version)
 
JavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring FrameworkJavaFX 2 Using the Spring Framework
JavaFX 2 Using the Spring Framework
 

Último

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 interpreternaman860154
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
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...Neo4j
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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 Processorsdebabhi2
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
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 RobisonAnna Loughnan Colquhoun
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
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.pptxEarley Information Science
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

Último (20)

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
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
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
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 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
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

Zombie Time - JSR 310 for the Undead

  • 1. ZombieTime – JSR 310 for the Undead Stephen Chin (@steveonjava) Java Technology Evangelist JavaOne Conference Chair
  • 4. 4 Is it just because we eat brains? https://www.flickr.com/photos/dwilliss/7861599590/
  • 7. But when it is us vs. them… https://www.flickr.com/photos/icedsoul/4511648609/in/photostream/
  • 8. 8 Humans don't stand a chance! https://www.flickr.com/photos/icedsoul/4470494133/
  • 9. JSR 310, a New Weapon Against the Humans! • Our researchers have come up with a new weapon against the humans! – Modern API – Zombies type slow, so we need a fluent API with easy conversions – Thread safe – Don't get caught in a deadlock with armed humans! – Simplified Time Zone Handling – Coordinated global attacks! 9https://www.flickr.com/photos/soul_stealer/8249718101/ Stephen Colebourne Roger Riggs
  • 10. Don't repeat this failure… • // hit the humans while they are celebrating! • Date attackDate = new Date(2013, 12, 25); 10 In the year 3913 https://www.flickr.com/photos/frogdna/6948427148/ +1900 0-based (No Range Checking!)
  • 11. 11 Why are we still using escalators 2000 years in the future? I think we are surrounded… I hope you took your Zombie shot, junior. January 25th, 3914 : Failed Zombie Trooper Invasion https://www.flickr.com/photos/starwarsblog/516181007/
  • 12. ZombieTime – Undead Trainer for JSR 310 12
  • 13. Basic Concepts • LocalDate, LocalTime, LocalDateTime – Represents a calendar date, time, or both • Instant – Amount of time since the epoch – ideal for timestamps and calculations • Period – A span of time between two dates (goes well with LocalDateTime) • Duration – A precise span of time (goes well with Instants) 13
  • 14. Creating Dates and Times • Now – LocalDate.now() • Static – LocalDate.of(2013, Month.DECEMBER, 25) // Use the enums! – LocalTime.of(11, 30, 5, 999_999_999) // Time to go to work… – LocalDateTime.of(2013, Month.DECEMBER, 25, 11, 30, 5, 999_999_999) // Even on Christmas • Parsing – LocalDate.parse() • Conversion – new Date().toInstant() – Calendar.getInstance().toInstant() 14
  • 15. PixelatedClock Timeline clockTimeline = new Timeline( new KeyFrame(Duration.millis(1), actionEvent -> { LocalTime now = LocalTime.now(); })); 15
  • 16. 16
  • 17. Formatting Dates and Times • Constants – DateTimeFormatter.BASIC_ISO_DATE // '2011-12-03+01:00' – DateTimeFormatter.ISO_TIME // '10:15:30+01:00' – DateTimeFormatter.ISO_DATE_TIME // '2011-12-03T10:15:30+01:00[Europe/Paris]' – DateTimeFormatter.ISO_WEEK_DATE // 2012-W48-6' • Localized Formatters – DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT) • Strings – date.toString("d MMM uuuu") // '25 Dec 2014' • Formatters are immutable and thread-safe for reuse! 17
  • 18. Localized PixelatedClock DateTimeFormatter clockFormat = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT); Timeline clockTimeline = new Timeline( new KeyFrame(Duration.millis(1), actionEvent -> { setText(now.format(clockFormat)); })); 18
  • 19. 19
  • 20. 20
  • 22. Using LocalTime/LocalDate • Comparing Times/Dates: – time.isBefore(LocalTime.NOON) // before noon – date.isAfter(LocalDate.ofYearDay(2014, 365 / 2)) // appx. halfway through the year • Year Info: – date.getYear() – date.getDayOfYear() – date.lengthOfYear() – date.isLeapYear() • Time Info: – time.getHour() / time.getMinute() / time.getSecond() / time.getNano() 22
  • 23. Hide from the sunlight! public BooleanProperty isNight = new SimpleBooleanProperty(); isNight.setValue(now.isAfter(LocalTime.of(6, 0)) && now.isBefore(LocalTime.of(19, 0))); underground.bind(Main.pixelatedClock.isNight.not()); 23
  • 24. 24
  • 25. Let's Add Some Villagers! children.add(new SpriteView.Fred(new Location(8, 2))); children.add(new SpriteView.Sam(new Location(9, 4))); children.add(new SpriteView.Ted(new Location(7, 6))); children.add(new SpriteView.Sarah(new Location(5, 4))); children.add(new SpriteView.Jenn(new Location(6, 5))); 25
  • 27. Using Time Zones Creating ZoneIds: • zoneId = ZoneId.of("Europe/Paris"); • zoneId = ZoneId.of(ZoneId.SHORT_IDS.get("EST")); • zoneId = ZoneOffset.ofHours(-8); Using ZoneIds: • dateTime.now(zoneId); • dateTime.atZone(zoneId); • Clock.system(zoneId); 27
  • 28. Make it Night! ZoneId zoneId = ZoneId.of("Europe/London"); LocalTime now = LocalTime.now(zoneId); 28
  • 29. Make it Night! (with a clock) ZoneId zone = ZoneId.of("Europe/London"); Clock clock = Clock.system(zone); LocalTime now = LocalTime.now(clock); 29
  • 30. 30 Wait!!! I just want your brains…
  • 31. Temporal Adjusters • Predefined adjustors for common cases – First or last day of month • date.with(TemporalAdjusters.firstDayOfMonth()) – First or last day of year • date.with(TemporalAdjusters.firstDayOfNextYear()) – Last Friday of the month • date.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY)) • Custom adjusters for your own business logic 31
  • 32. Friday 13th TimeAdjuster TemporalAdjuster friday13Adjuster = temporal -> { if (temporal.get(ChronoField.DAY_OF_MONTH) > 13) temporal = temporal.plus(1, ChronoUnit.MONTHS); temporal = temporal.with(ChronoField.DAY_OF_MONTH, 13); System.out.println("temporal = " + temporal); while (temporal.get(ChronoField.DAY_OF_WEEK) != DayOfWeek.FRIDAY.getValue()) { temporal = temporal.plus(1, ChronoUnit.MONTHS); System.out.println("temporal = " + temporal); } return temporal; }; 32
  • 35. Stephen Chin tweet: @steveonjava blog: http://steveonjava.com nighthacking.com Real Geeks Live Hacking NightHacking Tour
  • 36. Safe Harbor Statement The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. 36