【问题标题】:Saving dates in Firebase Database在 Firebase 数据库中保存日期
【发布时间】:2016-09-19 12:00:48
【问题描述】:

根据我的 Android 应用程序中的日期对一些数据进行排序。存储方式如下:

Map<Year, Map<Month, Map<Day, Stuff>>>

年、月、日只是包含整数。这无法保存到 Firebase 数据库,因为它是具有非字符串键的地图。我想把它展平并将其变成地图。对数据结构的巨大妥协,因为它允许前一个不允许(也不应该)允许的数据。但是,Date 也不是字符串。我试过这样的事情:

String key = String.valueOf(date.getTime());

然后使用数据结构:

Map<String, Stuff>

也不起作用,它似乎使用了一些 String 在 Firebase 数据库中不能具有的非法字符。那么,我将如何进行这项工作呢?非常感谢帮助。

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    我建议您创建一个如下所示的结构:

    ...
    date:{
       day:1,
       month:04,
       year:2016,
       timestamp:12345679979 //in milliseconds
    }
    

    通过这种方式,您可以轻松索引安全规则中的时间戳,通过 Child 进行查询并使用 start At 和 endAt 方法使用过滤器,您可以在其中定义定义范围的时间戳

    【讨论】:

    • 这感觉不错,但我如何用我的 Stuff 构建它?我是否创建例如 MyClass{ MyDate date;东西; } 这而不是将日期映射到这些东西?
    • 是的,这是一种很好的结构方式。因此,如果您需要从 Joda 或 Date 构造 Date 对象,您可以使用 getter 方法以“mm-dd-yyyy”的形式返回日期并传递给构造函数。由于您已经有了时间戳,因此您也可以将其用于构建
    【解决方案2】:

    如果你使用日期,你可以将其转换为字符串

    String date = new SimpleDateFormat("dd/MM/yyyy").format(dateObject);
    

    dateObject 是您正在使用的日期,并且

    "dd/MM/yyyy"
    

    是日期的格式。您可以在 oracle Customizing Formats tutorial page

    中找到有关此的格式信息

    【讨论】:

    • 回答“如何将日期转换为字符串?”的问题。这并不能解决我的问题,就像将 Long 转换为 String 一样(尽管这更糟糕,因为它需要使用数据库的其他方了解日期格式。)这是测试代码时的错误:“致命异常原因:com.google.firebase.database.DatabaseException:无效密钥:2016 年 9 月 19 日。密钥不得包含“/”、“.”、“#”、“$”、“[”或“] '"
    • 您可以尝试使用“dd-MM-yyyy”而不是“dd/MM/yyyy”,因为firebase 密钥对“-”没有任何问题
    • 至于其他方必须知道,无论您如何保存,他们都必须弄清楚使用什么格式。每个应用程序都以不同的方式处理这些事情。
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多