提问人:Murphler 提问时间:5/12/2021 更新时间:5/12/2021 访问量:996
错误:不兼容的类型:对象无法转换为 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()
}
}
现在我可能错了,我假设有问题的“对象”是 SimpleDateFormat 字符串。但是,我似乎找不到将 JSON 响应 Int 插入 LocalDate、DateTimeFormatter 的方法,因为这需要传入一个 String。任何帮助表示赞赏
答:
0赞
anatoli
5/12/2021
#1
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()
}
评论
0赞
Murphler
5/12/2021
LocalDate.parse() 需要 DateTimeFormatter 作为其第二个参数。不接受该 String 输入
0赞
anatoli
5/12/2021
@Murphler,然后先更新到SimpleDateFormat
"yyyy-MM-dd'T'hh:mm:ss"
0赞
Murphler
5/12/2021
似乎太不能让它工作。不断抛出相同的错误
0赞
anatoli
5/12/2021
@Murphler,我已经更新了我的答案。我刚刚执行了它。它有效。您收到什么错误?
1赞
Maxim Tulupov
5/12/2021
#2
当您使用 fun() = kompiler 时,会尝试猜测返回类型。在您的例子中,try 块返回 Date,catch 块返回 String,这些类型的常见父级 - Object。必须显式设置返回类型。试试这个,并注意日期格式。它在您的代码中不正确。
@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
}
}
评论
0赞
Murphler
5/13/2021
你是一个传奇,让我克服了错误,就“错误:无法弄清楚如何从光标读取此字段”错误和 dt 返回 null 而言。看起来糟糕的代码很深,哈哈,对我来说是一个调试之夜
评论