创建 typeconvertor 以将 Int 时间戳转换为 LocalDate

Creating typeconvertor to convert Int timestamp to LocalDate

提问人:Murphler 提问时间:5/10/2021 最后编辑:Murphler 更新时间:5/10/2021 访问量:376

问:

最好的方法是什么。我使用 2 个不同的 API,一个以 String 形式返回日期,另一个以 Int 时间戳的形式返回日期,格式为 162000360

我正在将 ThreeTen 向后移植用于日期/时间类。我已经成功地为我作为字符串返回的日期创建了一个类型转换器 - 下面提供

@TypeConverter
@JvmStatic
fun stringToDate(str: String?) = str?.let {
    LocalDate.parse(it, DateTimeFormatter.ISO_LOCAL_DATE)
}

@TypeConverter
@JvmStatic
fun dateToString(dateTime: LocalDate?) = dateTime?.format(DateTimeFormatter.ISO_LOCAL_DATE)

我正在努力为 Int 时间戳复制相同的内容,因为 DateTimeFormatter 需要一个 String 传递给它并且不允许 Int。任何帮助都非常感谢

编辑:尝试过以下实现

@TypeConverter
@JvmStatic
fun timestampToDateTime(dt : Int?) = dt?.let {
    try {
        val sdf = SimpleDateFormat("yyyy-MMM-dd HH:mm")
        val netDate = Date(dt * 1000L)
        val sdf2 = sdf.format(netDate)

        LocalDate.parse(sdf2, DateTimeFormatter.ISO_LOCAL_DATE_TIME)

    } catch (e : Exception) {
        e.toString()
    }
}

可能有点绕开,但希望它工作正常

java android-studio kotlin threetenbp

评论


答:

0赞 Alexey Soshin 5/10/2021 #1

您可能正在寻找:ofInstant

fun intToDate(int: Int?) = int?.let {
    LocalDate.ofInstant(Instant.ofEpochMilli(it.toLong()), ZoneId.systemDefault())
}

println(intToDate(162000360)) // 1970-01-02

此外,与其使用 ,不如使用 。IntLong