在Firebase中存储日期时间应采用何种格式以确保准确性?当前写法可行吗?
Firebase 日期时间存储格式选择及代码可行性分析
推荐的Firebase日期时间存储格式
- 优先存储数字类型的毫秒/微秒时间戳:这是确保准确性和易用性的最优方案。Firebase的实时数据库、Firestore都原生支持数字类型,基于UTC的时间戳能避免时区解析误差,同时方便后续做排序、范围查询(比如筛选某段时间内的数据)、时间差计算等操作。
- 避免存储字符串格式的日期:除非是用于直接展示的场景,否则字符串日期容易因格式不统一、时区处理不当引发解析错误,且无法高效进行数据筛选和排序。
你的代码可行性分析
你当前将millisecondsSinceEpoch转为字符串存储的方式可行,但存在明显弊端:
字符串类型的时间戳在Firebase中会按字典序进行排序和查询,这会导致逻辑错误——比如数字上1663028866561(约2022年)远大于999999999999(约2001年),但字符串排序会认为"999999999999"更大,最终查询结果不符合预期。
优化建议
直接存储数字类型的时间戳,无需转为字符串:
final int timestamp = DateTime.now().millisecondsSinceEpoch; // 将该int类型值直接写入Firebase即可
- 如果需要更高时间精度,可以使用
microsecondsSinceEpoch,Firebase支持大整数存储; - 读取数据时,可将数字时间戳转回DateTime:
DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(timestamp);
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

