我想在 JavaScript 中获取当前的 UTC 日期,但以本地日期格式显示它(就像Date.toLocaleDateString()
那样)。
我首先尝试只获取当前的 UTC 日期,Date.toUTCString()
但这实际上并没有以本地格式打印出来。
然后我尝试使用 中的选项配置toLocaleDateString()
,但这只是打印本地日期而不是本地格式的 UTC 日期。例如新的Date().toLocaleDateString(options = {timeZone: "UTC"})
然后我尝试使用 格式化Intl.DateTimeFormat()
,但这只是给出了相同的结果Date.toLocaleDateString()
。
如果有办法获取语言环境格式,那么我很乐意使用该格式来格式化 UTC 日期,但据我所知,没有。
例如,new Date("Sat, 30 Mar 2019 00:27:19 GMT")
对于每个支持的语言环境,在美国,我应该打印出“3/30/2019”,在欧洲,我应该打印出“30/3/2019”,依此类推。
但是,new Date("Sat, 30 Mar 2019 00:27:19 GMT").toLocaleDateString(options = {timeZone: "UTC"})
将改为打印“3/29/2019”。
Firestore 侦听器将在一段时间(可能是由于不活动)后随机关闭,并且在python中,没有简单的方法来捕获它们引发的错误,因为它们将它们放入了单独的线程中。就我而言,我想维持一个持久的侦听器,该侦听器由于不活动或服务器端错误而永远不会关闭。
我试过尝试将所有内容包装起来-除外,然后将所有内容包装在while(True)循环中,但这并不能捕获错误,因为错误是在单独的线程中抛出的。
在Linux和Windows设备上,在10分钟-24小时不活动(我不确定是不活动的情况下,可能是随机的,但我发现的最短间隔是启动后10分钟)后,就会发生错误。我没有尝试过Mac或任何其他设备,但我怀疑它是特定于设备的。
查看gRPC(侦听器用来在客户端和服务器之间进行通信的东西)规范,python api没有默认超时(并且超时不会解释为什么在不同的时间后断开连接),并且没有在任何地方设置超时在Firestores侦听器代码中。
发生的特定错误是:
google.api_core.exceptions.InternalServerError:500收到了RST_STREAM,错误代码为0
有时
google.api_core.exceptions.InternalServerError:500收到RST_STREAM,错误代码2
最少的代码来显示问题(在一个仅运行了一个文档的名为info的虚拟集合上运行)
class TestWatchInfo():
def __init__(self):
self.query_watch = db.collection(u'info').on_snapshot(self.on_snapshot)
def on_snapshot(self, col_snapshot, changes, read_time):
try:
for change in changes:
pass
except Exception as err:
print(err)
print("Error occurred at " + str(time.ctime()))
traceback.print_exc()
if __name__ == '__main__':
try:
test_object = TestWatchInfo()
while(True):
time.sleep(60)
except Exception as err:
print(err)
print("Error occurred at " + str(time.ctime()))
traceback.print_exc()
Run Code Online (Sandbox Code Playgroud)
理想情况下,我将能够捕获发生在主python线程中的实际错误,但据我所知,由于我不是生成线程的人,因此我无法添加线程/ gRPC特定代码来捕获该错误。另外,由于服务器端,gRPC连接关闭后,我希望能够自动重新启动它。
实际上,Firestore侦听器仅在其创建的线程中引发错误并关闭该侦听器。