首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LocalDateTime TypeConverter房间

LocalDateTime TypeConverter房间
EN

Stack Overflow用户
提问于 2019-02-28 22:27:42
回答 1查看 6.5K关注 0票数 5

我需要能够使用房间TypeConverters在我的sqlite数据库上存储和检索LocalDateTime属性。

经过一些研究,我实现了下面的转换器。但是,此转换器似乎只存储默认日期和时间(1970-01-01)。所以转换不正确,有没有人有一个可以正常工作的LocalDateTime转换器?或者对这个有什么改进吗?

代码语言:javascript
复制
public class LocalDateTimeConverter {
@TypeConverter
public static LocalDateTime toDate(Long timestamp) {
    LocalDateTime ldt;
    if (timestamp == null){
        return null;
    }else{
        ldt = Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDateTime();
    }
    return ldt;
}

@TypeConverter
public static Long toTimestamp(LocalDateTime date) {
    if (date == null){
        return  null;
    }else {
        return date.getLong(ChronoField.CLOCK_HOUR_OF_DAY);
    }
}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 22:55:02

我已经在我的库here中实现了一个LocalDateTimeConverter。请记住,这扩展了我的BaseConverterhere。注意:这些都是用Kotlin编写的。

如果你想自己实现,我建议存储为一个字符串,而不是时间戳。如果您查看上面的链接,您将看到我首先使用toString()将日期转换为字符串,然后使用parse()函数将日期转换回LocalDateTime

这是用Java编写的:

代码语言:javascript
复制
public class LocalDateTimeConverter {

    @TypeConverter
    public static LocalDateTime toDate(String dateString) {
        if (dateString == null) {
            return null;
        } else {
            return LocalDateTime.parse(dateString); 
        }
    }

    @TypeConverter
    public static String toDateString(LocalDateTime date) {
        if (date == null) {
            return null;
        } else {
            return date.toString();
        }
    }
}

编辑:

上面使用的代码不起作用的原因是,在您的toTimestamp()函数中,您只是将一天中的某一小时作为Long请求。因此,如果给定的LocalDateTime是2019年1月1日12:00 PM,您将存储12。因此,在toDate中,您请求将时间戳12转换为LocalDateTime,即1970年1月1日午夜过后12毫秒。

您可以选择继续使用时间戳来存储日期,只需将toTimestamp()中的该行更改为date.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()即可。这将为您提供当前时区中LocalDateTime的实际时间戳。注意这里的时区:当您使用系统的默认时区来保存/加载数据库时,如果系统更改了时区,您可能会得到错误的值。如果我在纽约使用你的应用程序,然后在旧金山重新打开应用程序,所有的时间都会缩短3个小时。最好使用设置的时区保存/加载,然后将其转换为设备的当前时区。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54927913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档