Android Jetpack Compose DatePicker选中日期后显示为前一天问题
问题根因
日期差1天是时区不一致导致的:
MaterialDatePicker返回的选中日期时间戳是UTC时区当天0点的毫秒值- 原有代码里的
SimpleDateFormat默认使用设备本地时区处理时间戳,当本地时区和UTC存在时差时就会出现日期偏移。比如UTC时区的2024-05-20 00:00:00,对应UTC-5时区的时间就是2024-05-19 19:00:00,就会显示为前一天的日期。
修复代码
只需修改DateFormater方法,指定格式化用UTC时区和日期选择器的返回值时区对齐即可:
fun DateFormater(milliseconds: Long?): String? { milliseconds?.let { val formatter = SimpleDateFormat("MM/dd/yyyy", Locale.US) // 新增时区指定逻辑 formatter.timeZone = TimeZone.getTimeZone("UTC") val calendar: Calendar = Calendar.getInstance() calendar.timeInMillis = it return formatter.format(calendar.time) } return null }
如果项目支持Java 8及以上,也可以用新的时间API避免旧版Calendar、SimpleDateFormat的时区坑:
fun DateFormater(milliseconds: Long?): String? { return milliseconds?.let { Instant.ofEpochMilli(it) .atZone(ZoneOffset.UTC) .format(DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US)) } }
内容的提问来源于stack exchange,提问作者mxgenius
相关产品推荐
相关产品推荐

