python - 我输入到 Firestore 数据库的所有日期都在增加 1 小时。(Google Firestore 和日期戳问题)
问题描述
为什么 Firebase 在添加时间戳时会增加一小时的值?
我有一个 python 脚本,可以将一些值放入 Firestore 数据库中的集合中。数据包括时间戳。(请参阅此处的python代码:)
def insertIntoFirebase(yrRow):
#myDate = dateutil.parser.parse(yrRow.fromDate)
myDate = datetime.strptime(yrRow.fromDate, '%Y-%m-%dT%H:%M:%S')
print("Tiden " + str(myDate))
doc_ref = db.collection('yrData').document(str(yrRow.index))
doc_ref.set({'index':yrRow.index ,"timeText": yrRow.fromDate,'time': myDate,
'temperature':yrRow.temperature})
在这种方法中,我将一些值放入了 Firestore 集合 YrData。查看 KeyValue 对 time 和 timeText
在 Firestore 数据库中查看键值对时间的值是 2020-01-16T23:00:00 女巫是正确的日期时间和我想要存储到数据库中的时间。这在 firestore 数据库中存储为字符串。问题是 keyvaluepair timeText女巫被存储为 Firebase 时间戳。(见截图)
在查看 Firestore 中的键值对时,该值不是我放入数据库的值。这是我的价值 + 1 小时。(见截图)
从 Swift 中的 Firestore 文档中获取日期时,时间戳也会增加一小时。:(
运行 python 脚本的服务器、运行浏览器的计算机和运行 swift 代码的 MacBook 都具有相同的时区。
编辑:更改了一些错误并添加了关于时区的最后一段
解决方案
您的代码timeText
根据格式化日期的机器上配置的时区进行格式化(也许是 UTC?)。Firestore 控制台根据运行浏览器的机器的时区 (UTC+1) 格式化时间戳。这些显然是不同的时区,彼此相差 1 小时。这是一个常见的误解——它在 Stack Overflow 上经常出现。
请注意,Timestamp 对象不包含任何时区信息。它只是与 unix 纪元时间的偏移量。为了从中格式化人类可读的时间,需要假设时区,这是您遇到明显时间差异的地方。
推荐阅读
- google-cloud-firestore - 在管道中将数据写入 Google Firestore
- machine-learning - 使用机器学习从数据中获取洞察还需要人工分析吗?
- swift - Firebase 将数据从文本字段存储到存储
- android - Google Play 管理中心:您的应用还没有任何应用内商品
- c++ - 使用 CMake、Microsoft MPI 和 Visual Studio 2017 - 找不到 mpi.h
- crystal-reports - 当我用超出其框设计的数据填充“ket2”时,如何使列低于?
- laravel - 将 Laravel Config 数组传递给 VueJs 组件
- sql - 我们可以从只存储日期而不是时间的日期列中提取时间吗?
- java - 多个时区中的 Spring @Scheduled 任务
- php - 银器验证器不适用于 silverstripe 的 CMS 前端