Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我输入到Firestore数据库的所有日期都是+;1小时。(谷歌Firestore和邮戳问题)_Python_Firebase_Google Cloud Firestore - Fatal编程技术网

Python 我输入到Firestore数据库的所有日期都是+;1小时。(谷歌Firestore和邮戳问题)

Python 我输入到Firestore数据库的所有日期都是+;1小时。(谷歌Firestore和邮戳问题),python,firebase,google-cloud-firestore,Python,Firebase,Google Cloud Firestore,为什么Firebase在添加时间戳时会将值增加一小时 我有一个python脚本,它将一些值放入Firestore数据库的集合中。数据包括时间戳。(请参见此处的python代码:) 在这个方法中,我将一些值放入firestore集合数据中。查看键值对time和timeText 在Firestore数据库中查找时,keyvalue对的值time为2020-01-16T23:00:00,这是正确的日期时间以及我要存储到数据库中的内容。这将作为字符串存储在firestore数据库中。问题在于keyval

为什么Firebase在添加时间戳时会将值增加一小时

我有一个python脚本,它将一些值放入Firestore数据库的集合中。数据包括时间戳。(请参见此处的python代码:)

在这个方法中,我将一些值放入firestore集合数据中。查看键值对time和timeText

在Firestore数据库中查找时,keyvalue对的值time为2020-01-16T23:00:00,这是正确的日期时间以及我要存储到数据库中的内容。这将作为字符串存储在firestore数据库中。问题在于keyvaluepairtimeText开关存储为Firebase时间戳。(见截图)

当查看Firestore中的键值对time时,该值不是我输入数据库的值。这是我的价值+1小时。(见截图)

在Swift中从Firestore文档获取日期时,时间戳中还添加了一个小时:(

运行python脚本的服务器、运行浏览器的计算机和运行swift代码的MacBook都具有相同的时区

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


您的代码正在根据正在格式化日期的计算机上配置的时区(可能是UTC?)格式化
timeText
。Firestore控制台根据运行浏览器的计算机的时区格式化时间戳(UTC+1)。这些时区明显不同,彼此相差1小时。这是一个常见的误解-在堆栈溢出问题上经常出现这种情况


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

我发现了错误。Python并不真正关心您所在的时区,并且有一个时区的“奇怪”实现。要解决这个问题,我必须让python知道想要的时区(即使它是在运行脚本的服务器上设置的)。下面的代码解决了我的问题

    myDate = datetime.strptime(yrRow.fromDate, '%Y-%m-%dT%H:%M:%S')
    tz = pytz.timezone('Europe/Oslo')
    aware_datetime = tz.localize(myDate

非常感谢您的帮助。我发现我在问这个问题时搞砸了。键值“timeText”(firestore中的字符串)具有正确的值,但当我在时间键值对中存储与firestore中的日期(datestamp)相同的值时,会添加一个小时:-(.运行python脚本的服务器、运行浏览器的计算机和运行swift代码的MacBook都具有相同的时区。运行python脚本的linux服务器上的时区pi@rpi:~$date+%Z%Z“我的Macbook上的CET+0100时区:(运行浏览器和swift iphone项目)Jimmys-air-2:~jimmybergetun$date+%Z%Z“CET+0100
    myDate = datetime.strptime(yrRow.fromDate, '%Y-%m-%dT%H:%M:%S')
    tz = pytz.timezone('Europe/Oslo')
    aware_datetime = tz.localize(myDate