首页 > 解决方案 > 我输入到 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 都具有相同的时区。

编辑:更改了一些错误并添加了关于时区的最后一段

在此处输入图像描述

标签: pythonfirebasegoogle-cloud-firestore

解决方案


您的代码timeText根据格式化日期的机器上配置的时区进行格式化(也许是 UTC?)。Firestore 控制台根据运行浏览器的机器的时区 (UTC+1) 格式化时间戳。这些显然是不同的时区,彼此相差 1 小时。这是一个常见的误解——它在 Stack Overflow 上经常出现。

请注意,Timestamp 对象不包含任何时区信息。它只是与 unix 纪元时间的偏移量。为了从中格式化人类可读的时间,需要假设时区,这是您遇到明显时间差异的地方。


推荐阅读