安卓端如何将选定时间戳转换为Firebase服务器时间戳
实现方案
核心逻辑说明
你拿到的1631724053是秒级Unix时间戳,安卓日期处理API默认使用毫秒级时间戳,所以第一步需要先乘以1000转换为毫秒值,再通过日期格式化工具输出指定格式的字符串即可,目标格式的模板规则为MMMM dd, yyyy 'at' h:mm:ss a zzz。
代码实现
Kotlin 版本
方案1:SimpleDateFormat(兼容全安卓版本)
// 1. 转换秒级时间戳为毫秒 val timestampSec = 1631724053L val timestampMs = timestampSec * 1000 // 2. 初始化格式化器,指定格式和目标时区 val sdf = SimpleDateFormat("MMMM dd, yyyy 'at' h:mm:ss a zzz", Locale.ENGLISH) // 如需固定为UTC+5:30时区,打开下行注释即可,默认使用设备本地时区 // sdf.timeZone = TimeZone.getTimeZone("GMT+5:30") // 3. 格式化输出 val formattedTime = sdf.format(Date(timestampMs)) Log.d("FormattedTime", formattedTime)
方案2:DateTimeFormatter(API 26+ 或使用ThreeTenABP兼容低版本)
val timestampSec = 1631724053L val instant = Instant.ofEpochSecond(timestampSec) // 固定为UTC+5:30时区的写法 val zoneId = ZoneId.of("GMT+5:30") val formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy 'at' h:mm:ss a zzz", Locale.ENGLISH) .withZone(zoneId) val formattedTime = formatter.format(instant)
Java 版本
// 1. 时间戳转换 long timestampSec = 1631724053L; long timestampMs = timestampSec * 1000; // 2. 初始化格式化器 SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd, yyyy 'at' h:mm:ss a zzz", Locale.ENGLISH); // 固定时区设置 // sdf.setTimeZone(TimeZone.getTimeZone("GMT+5:30")); // 3. 输出结果 String formattedTime = sdf.format(new Date(timestampMs));
注意事项
- 如果需要和Firebase服务器时间严格对齐,建议先通过Firebase SDK获取服务器时间偏移量,修正本地时间戳误差后再做格式化
- 若需要本地化显示月份为中文,将
Locale.ENGLISH改为Locale.CHINA即可 - API 26以下使用DateTimeFormatter需要引入ThreeTenABP兼容库,避免运行时异常
内容的提问来源于stack exchange,提问作者Suman Radhakrishnan
相关产品推荐
相关产品推荐

