【问题标题】:How can I store a calendar data in database如何将日历数据存储在数据库中
【发布时间】:2011-11-09 20:50:20
【问题描述】:

我想在我的 Android 数据库中存储一个日历条目。 在数据库中存储简单类型如 int 和 String 是没有问题的。但我不知道如何存储日历类型。

我的表格如下所示: reate table wish(_id 整数主键自增," + "名称文本不为空," + "日期文本,图片URL文本,.....)

一切都被声明为“文本”。

在我的活动中,我有以下代码: 日历 cal = Calendar.getInstance();

cal 应该存储在我的表中。谁能给个提示?

【问题讨论】:

    标签: android database calendar


    【解决方案1】:

    保存日历历元表示的毫秒数:

    long millis = calendar.getTimeInMillis();
    

    然后将这个长存储在数据库中。您可以通过从数据库中读取长值并在日历中使用setTimeInMillis(long millis) 来恢复日历。

    【讨论】:

    • 如何在我的数据库中存储长值?我应该将其转换为字符串吗?
    • SQLite 支持长值作为“整数”数据类型,使用它。 sqlite.org/datatype3.html
    • 您可能还想将其存储为字符串,如果您使用不直接理解millis的数据库浏览器浏览数据库,这允许您读取它——但始终使用millis from代码。
    【解决方案2】:

    为了有一个稳定且独立于本地化的解决方案,我建议更改数据库表以存储尽可能长的日期。您可以使用dateCalendar.getTimeInMillis() 获取日历日期,当您阅读它时,您会添加一行

    long dateAsMillis;
    dateCalendar = Calendar.getInstance();
    dateCalendar.setDate(dateAsMillis);
    

    但如果您确实需要/想要使用字符串,请查看DateFormat.parse(String) - 您可以定义日期应具有的格式,从而从字符串创建 Date 对象。

    【讨论】:

    • 这是个好主意。但是如何将“long”存储在我的数据库中?目前每个条目都是“文本”
    • 将您的数据库创建语句更改为:(_id 整数主键自动增量,“+”名称文本不为空,“+”日期长,picurl 文本,.....)
    【解决方案3】:

    我会将您的日期转换为字符串并将该字符串存储到数据库中。 然后,当您从数据库中读取字符串时,只需将其解析回日期即可。

    【讨论】:

    • 这个我已经试过了。如何将字符串解析为可追溯的日期?
    • 我会采用其他人推荐的长表示。这无疑是一种更简单的方法。
    • 你是对的。但是如何将长值存储在我的数据库中?
    • 我猜你从来没有处理过时区问题。即使你不认为你会处理时区,总是使用毫秒,永远不要依赖字符串!
    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 2012-09-04
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多