-1

在我的 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 的方法,因为这需要传入一个字符串。任何帮助表示赞赏

4

2 回答 2

1

当您使用 fun() = kompiler 尝试猜测返回类型。在您的情况下,try 块返回日期,catch 块返回字符串,这些类型的共同父对象 - 对象。您必须显式设置返回类型。试试这个并留意日期格式。在您的代码中不正确。

@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
        }
    }
于 2021-05-12T15:35:23.360 回答
0

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()
}
于 2021-05-12T13:59:19.827 回答