Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Modern Date/Time APIs on Android
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Alex Florescu
March 12, 2016
Programming
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Modern Date/Time APIs on Android
Droidcon Bucharest 2016
Alex Florescu
March 12, 2016
More Decks by Alex Florescu
See All by Alex Florescu
Java 8 on Android
anothem
2
390
How to talk to your users
anothem
1
940
How we've built Yahoo Fantasy Football (Droidcon Italy '15)
anothem
1
780
Other Decks in Programming
See All in Programming
すこし踏み込む CancellationToken
htkym
2
1.7k
パーソナライズPodcastを作った話
repunit11
0
130
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
phperだってパンチカードでコーディングしたい
o0h
PRO
0
270
Simple Storage Service(S3) is not simple
iwatsukayura
0
250
JRuby: Past, Present, and Future
headius
0
230
残高管理から台帳サービスへの進化
artoy
0
180
sbt 2.0: takeoff
eed3si9n
0
130
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
240
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
260
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
490
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
260
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Building AI with AI
inesmontani
PRO
1
1.3k
Designing Powerful Visuals for Engaging Learning
tmiket
1
600
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
So, you think you're a good person
axbom
PRO
2
2.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
630
Embracing the Ebb and Flow
colly
88
5.2k
Transcript
Modern Date/Time APIs on Android Droidcon Bucharest 2016 Alex Florescu
@flor3scu YPlan
Overview • Why • Joda time and JSR-310 • What
can you do with them • Setup & testing • Good and bad
Date and Time is hard • Timezones • Daylight savings
• Different calendar systems • Leap days/seconds/etc • AND MORE
Quiz: Leap years • A leap year (e.g. 2016) adds
a day, February 29th • What years are leap years?
Quiz: What is a leap year? • Divisible by four
Quiz: What is a leap year? • Divisible by four
• But NOT divisible by 100
Quiz: What is a leap year? • Divisible by four
• But NOT divisible by 100 • UNLESS divisible by 400
What’s wrong with Java 6 Date?
java.util.Date Date someDate = new Date(1967, 5, 10); System.out.println(someDate); //
What date is this? May 10th 1967 June 11th 1967 October 5th 1967 November 6th 1967
java.util.Date Date someDate = new Date(1967, 5, 10); System.out.println(someDate); Answer:
June 10th 3867 Year: years from 1900 Month: 0-indexed Day: 1-indexed
Java 6 Date/Time API • Mutable • 0-indexed months •
Little support for simple operations • No representation for duration, non-time-zone dates, only dates, only times etc.
JVM Alternatives • Joda Time • Since 2004 • De-facto
date/time solution pre-Java 8 • JSR-310 / Java 8 API • Released in 2014 • Same project lead as Joda Time • Official API for Java 8, backported to Java 6
Joda time • Still actively maintained • For new projects
use Java 8 API • See comparison and Stephen Colebourne’s blog
Joda time on Android • Can use directly, but large
memory footprint • See problem description • Solution: https://github.com/dlew/joda-time-android • Method count: 5053
JSR-310 / Java 8 API • Official JVM solution (>=
Java 8) • Built with experience from Joda time • Generally better performance • Smaller package, fewer methods
ThreeTen on Android • Backport library “ThreeTen”, Java 6 compatible
• Same problem as Joda if use JVM lib directly • Use: https://github.com/JakeWharton/ThreeTenABP • Method count: 3278
Setup • In build.gradle: compile 'com.jakewharton.threetenabp:threetenabp:1.0.3' • In Application.onCreate(): @Override
public void onCreate() { super.onCreate(); AndroidThreeTen.init(this); }
Cool things ZonedDateTime.now(); //2016-03-12T12:11:25.371+02:00 [Europe/Bucharest] ZonedDateTime.now(ZoneId.of("Europe/ London")); //2016-03-12T10:11:26.374+00:00 [Europe/London]
Cool things LocalDateTime now = LocalDateTime.now(); LocalDate tomorrowDay = now.toLocalDate().plusDays(1);
LocalDateTime noonTomorrow = tomorrowDay.atTime(12, 0);
Cool things LocalTime now = LocalTime.now(); LocalTime lunchTime =
LocalTime.of(12, 30); if (now.isAfter(lunchTime)) { // GO TO LUNCH }
Testing • UI tests — just test the app •
Robolectric tests — initialise with Robo context • Plain JUnit tests — use JVM back port testCompile 'org.threeten:threetenbp: 1.3.1'
Testing • Note: Can’t mix Robolectric and plain JUnit tests
• Separate plain JUnit and Robolectric tests • If using ThreeTenABP in a module/configuration, all tests (that involve ThreeTen) must be Robolectric
Why should you use? • Safer, clearer, fluent API •
Easier to do everything • Immutable • Excellent timezone support
Any negatives? • Immutable (Android GC’ing is not JVM GC’ing)
• 5% towards DEX limit • Need to connect old and new APIs • Android specific locale issues (e.g. 24-hr toggle)
More docs • ThreeTen Reference • JavaDoc
Thank you • Slides: http://bit.do/AlexDroidconRo • T: @flor3scu