You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中如何获取指定城市的timestamp?(minSdkVersion 23)

获取指定城市对应的Timestamp(minSdkVersion 23兼容方案)

在Android项目中处理跨时区时间时,核心是通过IANA标准时区ID定位目标城市的时区,再基于该时区计算对应的UTC时间戳(timestamp本质是UTC毫秒数,与时区无关,这里实际是获取目标时区当前本地时间对应的UTC时间戳)。以下是针对minSdkVersion 23的两种实现方案:

方案一:使用系统原生API(无需引入第三方库)

Android 6.0(API23)自带TimeZone和Calendar类,可直接实现需求:

  1. 确定目标城市的IANA时区ID,比如巴黎对应"Europe/Paris"(可通过TimeZone.getAvailableIDs()获取所有合法时区ID)
  2. 基于时区构建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实现):

  1. 引入依赖(在Module级build.gradle中添加):
implementation 'com.jakewharton.threetenabp:threetenabp:1.4.0'
  1. 在Application类中初始化库:
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        AndroidThreeTen.init(this);
    }
}
  1. 编写代码获取巴黎时间戳:
// 定位巴黎时区
ZoneId parisZone = ZoneId.of("Europe/Paris");
// 获取该时区下当前时间并转换为UTC时间戳
long parisTimestamp = ZonedDateTime.now(parisZone).toInstant().toEpochMilli();

注意事项

  • 必须使用IANA标准时区ID(如"Europe/Paris"),避免使用缩写(如"CET"),缩写可能存在歧义或不兼容问题
  • 时间戳本身是UTC基准的毫秒数,不同时区的同一时刻对应的时间戳完全相同,上述代码的作用是获取目标时区当前本地时间对应的UTC时间戳

内容的提问来源于stack exchange,提问作者onesector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:10:34