error: incompatible types: Object cannot be converted to LocalDate

error: incompatible types: Object cannot be converted to LocalDate

在我的 JSON 响应中,我收到日期作为时间戳值,例如下面:

"dt":1620345600

我正在尝试使用 ThreeTen BP 库将其转换为 LocalDate。我尝试按如下方式应用 TypeConverter

@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()
    }
}

现在我可能错了,我假设有问题的 'Object' 是 SimpleDateFormat 字符串。但是我似乎无法找到将 JSON 响应 Int 插入 LocalDate DateTimeFormatter 的方法,因为这需要传入一个字符串。感谢任何帮助

DateTimeFormatter.ISO_LOCAL_DATE_TIME 期待以下日期格式 yyyy-MM-dd'T'hh:mm:ss

您可以将第一个格式化程序更改为

val sdf = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss")

并使用 DateTimeFormatter.ISO_LOCAL_DATE_TIME

更新

整个解决方案:

try {
    val sdf = SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss")
    val netDate = Date(dt * 1000L)
    val sdf2 = sdf.format(netDate)

    LocalDate localDate = LocalDate.parse(sdf2, DateTimeFormatter.ISO_LOCAL_DATE_TIME)

    Log.d("TAG", "date " + localDate.toString());
} catch (e : Exception) {
    e.printStackTrace()
}

当您使用 fun() = kompiler 尝试猜测 return 类型。在您的情况下,请尝试块 returns 日期,捕获块 returns 字符串,这些类型的共同父级 - 对象。您必须明确设置 return 类型。试试这个并留意日期格式。您的代码不正确。

@TypeConverter
    fun timestampToDateTime(dt : Int?): LocalDate? {
        if (dt == null) {
            return null
        }
        return try {
            val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm")
            val netDate = Date(dt * 1000L)
            val sdf2 = sdf.format(netDate)
            LocalDate.parse(sdf2, DateTimeFormatter.ISO_LOCAL_DATE_TIME)
        } catch (e : Exception) {
            //TODO handle exception
            null
        }
    }