Android Kotlin中如何获取指定城市的timestamp?(minSdkVersion 23)
获取指定城市对应的Timestamp(minSdkVersion 23兼容方案)
在Android项目中处理跨时区时间时,核心是通过IANA标准时区ID定位目标城市的时区,再基于该时区计算对应的UTC时间戳(timestamp本质是UTC毫秒数,与时区无关,这里实际是获取目标时区当前本地时间对应的UTC时间戳)。以下是针对minSdkVersion 23的两种实现方案:
方案一:使用系统原生API(无需引入第三方库)
Android 6.0(API23)自带TimeZone和Calendar类,可直接实现需求:
- 确定目标城市的IANA时区ID,比如巴黎对应
"Europe/Paris"(可通过TimeZone.getAvailableIDs()获取所有合法时区ID) - 基于时区构建Calendar实例,获取对应时间戳:
// 初始化巴黎时区 TimeZone parisTimeZone = TimeZone.getTimeZone("Europe/Paris"); // 获取该时区下的当前时间Calendar实例 Calendar parisCalendar = Calendar.getInstance(parisTimeZone); // 获取对应的UTC时间戳(毫秒级) long parisTimestamp = parisCalendar.getTimeInMillis();
方案二:使用ThreeTenABP(更简洁的日期时间处理)
若需要更现代化的日期API(对齐Java 8的JSR-310标准),可引入ThreeTenABP库(专门为低版本Android适配的JSR-310实现):
- 引入依赖(在Module级build.gradle中添加):
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0'
- 在Application类中初始化库:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); AndroidThreeTen.init(this); } }
- 编写代码获取巴黎时间戳:
// 定位巴黎时区 ZoneId parisZone = ZoneId.of("Europe/Paris"); // 获取该时区下当前时间并转换为UTC时间戳 long parisTimestamp = ZonedDateTime.now(parisZone).toInstant().toEpochMilli();
注意事项
- 必须使用IANA标准时区ID(如
"Europe/Paris"),避免使用缩写(如"CET"),缩写可能存在歧义或不兼容问题 - 时间戳本身是UTC基准的毫秒数,不同时区的同一时刻对应的时间戳完全相同,上述代码的作用是获取目标时区当前本地时间对应的UTC时间戳
内容的提问来源于stack exchange,提问作者onesector
相关产品推荐
相关产品推荐

