Kotlin LocalDate 与时间戳相互转换

文章目录

    在 Android Jetpack Compose 中使用 MaterialDatePicker 返回的日期为 Long 型时间戳。

    我想将其转换为 LocalDate 类型。

    datepicker 返回的数据类型

    1630195200000

    data class convertor 存入本地数据库的数据类型

    1630195200

    其对应的转换函数:

    @TypeConverter
    fun dateToTimestamp(date: LocalDate?): Long? {
    	val zoneId: ZoneId = ZoneId.systemDefault()
    	return date?.atStartOfDay(zoneId)?.toEpochSecond()
    }
    

    在线查看当前时间戳

    https://www.unixtimestamp.com/

    将 1630195200 转换为可读的时间:

    Format:	Seconds
    GMT:	Sun Aug 29 2021 00:00:00 GMT+0000
    Your Time Zone:	Sun Aug 29 2021 08:00:00 GMT+0800 (中国标准时间)
    

    LocalDate 如何用整型时间戳数字来初始化

    // long to LocalDate
    val date = Instant.ofEpochMilli(it).atZone(ZoneId.systemDefault()).toLocalDate();
    

    由于 LocalDate 只有 ofEpochDay 函数,从天数转换为 LocalDate。

    val date = LocalDate.ofEpochDay(days)

    也没有 ofEpochSecond 函数,只有 LocalDateTime 有这个功能。所以只能使用上面的方法。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式