Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
kotlinx.datetime 使ってみた
Search
Takuji Nishibayashi
July 10, 2024
Technology
0
780
kotlinx.datetime 使ってみた
Takuji Nishibayashi
July 10, 2024
Tweet
Share
More Decks by Takuji Nishibayashi
See All by Takuji Nishibayashi
compose-hot-reload を試そうとした話
takuji31
0
88
CameraX使ってみた
takuji31
0
240
HiltのCustom Componentについて
takuji31
0
290
java.timeをAndroidで使う
takuji31
0
140
KSPを使ってコード生成
takuji31
0
390
Kotlin Symbol Processing API (KSP) を使って Kotlin ア プリケーションの開発を効率化する
takuji31
1
2.9k
kotlinx.serialization
takuji31
0
620
kanmoba-returns-02.pdf
takuji31
0
240
AndroidXとKotlin Coroutines
takuji31
0
390
Other Decks in Technology
See All in Technology
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
2
290
おやつは300円まで!の最適化を模索してみた
techtekt
PRO
0
260
2025年になってもまだMySQLが好き
yoku0825
8
3.5k
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
3
1.2k
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
2
130
データアナリストからアナリティクスエンジニアになった話
hiyokko_data
2
360
『FailNet~やらかし共有SNS~』エレベーターピッチ
yokomachi
1
200
Kubernetes における cgroup v2 でのOut-Of-Memory 問題の解決
pfn
PRO
0
450
BPaaSにおける人と協働する前提のAIエージェント-AWS登壇資料
kentarofujii
0
110
モバイルアプリ研修
recruitengineers
PRO
5
1.7k
実践アプリケーション設計 ①データモデルとドメインモデル
recruitengineers
PRO
5
1.5k
Function Body Macros で、SwiftUI の View に Accessibility Identifier を自動付与する/Function Body Macros: Autogenerate accessibility identifiers for SwiftUI Views
miichan
2
160
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
840
The Cult of Friendly URLs
andyhume
79
6.6k
Fireside Chat
paigeccino
39
3.6k
The Pragmatic Product Professional
lauravandoore
36
6.8k
Rails Girls Zürich Keynote
gr2m
95
14k
Faster Mobile Websites
deanohume
309
31k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Designing for humans not robots
tammielis
253
25k
Mobile First: as difficult as doing things right
swwweet
224
9.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
How to Think Like a Performance Engineer
csswizardry
26
1.9k
Designing for Performance
lara
610
69k
Transcript
kotlinx.datetime 使ってみた Sansan モバイル勉強会 vol.1 Takuji Nishibayashi(@takuji31)
自己紹介 西林 拓志 (にしばやし たくじ ) Twitter/GitHub takuji31 Sansan 株式会社
2024/04/01 入社 技術本部 Mobile Application グループ 6 月〜 Eight Android チーム テックリード Android (2009〜 ) Kotlin (2014〜 ) 1
日付処理してますか? 2
Kotlin JVM や Android で日付関連クラスといえば 3
java.util.Date / java.util.Calendar 4
java.time (JSR310) 5
今なら java.time を使うことが多い 6
see. java.time を Android で使う 7
Kotlin Multiplatform だとどうか? 8
kotlinx.datetime 9
Kotlin Multiplatform 対応の公式ライブラリー 10
kotlinx.serialization 対応 11
JVM/JS/WASM/Native 等実装あり 12
github.com/Kotlin/kotlinx-datetime 13
kotlinx.datetime の使い方 14
build.gradle.kts repositories { mavenCentral() } kotlin { sourceSets { commonMain
{ dependencies { implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.0") } } } } 15
kotlinx.datetime のクラスたち Instant Clock LocalDateTime LocalDate LocalTime TimeZone Month DayOfWeek
etc. 16
今回はよく使いそうなクラスだけ紹介 17
Instant 18
エポック秒を持っているクラス 19
いわゆる Date っぽいやつ 20
使い方 val now = Clock.System.now() now.epochSeconds // 1970/01/01 00:00:00からの経過秒数 now.toEpochMilliseconds()
// 1970/01/01 00:00:00からの経過ミリ秒数 now.nanosecondsOfSecond // ナノ秒 val secondLater = now + 1.seconds// 1秒後 val sameTimeOfYesterday = now - 1.days // 昨日の同じ時間 21
LocalDateTime 22
タイムゾーンを含まない DateTime 23
LocalDate + LocalTime 24
使い方 val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) now.year // 2024 now.month //
Month.JULY now.monthNumber // 7 now.date // 10 now.hour // 12 now.minute // 34 now.second // 56 25
注意点 26
まだ alpha なので破壊的変更入るかも? 27
JVM では java.time を使った方がいいかも? 28
実装が JVM だと java.time のラッパー 29
java.time みたいに ZonedDateTime や OffsetDateTime といったものはない 30
→ Instant を適宜タイムゾーンに応じて変換する 31
LocalDateTime は直接計算できない 32
→ Instant にしてから計算して戻す 33
Instant にしてから計算して戻す val timeZone = TimeZone.currentSystemDefault() val now = Clock.System.now().toLocalDateTime(timeZone)
val sameTimeInTomorrow = (now.toInstant(timeZone) + 1.days) .toLocalDateTime(timeZone) 34
Enjoy kotlinx.datetime 35