Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
在mysql数据库中存储python time.struct_time的最佳方法_Python_Mysql - Fatal编程技术网

在mysql数据库中存储python time.struct_time的最佳方法

在mysql数据库中存储python time.struct_time的最佳方法,python,mysql,Python,Mysql,我正在使用python的feedparser模块来解析RSS提要。解析后,feedparser以python 9元组时间格式(time.struct_time)返回日期 我想将这些值存储在mysql数据库中,以便以后检查提要的格式。重要的是,如果时间元组被转换,当转换回来时,它们保持不变,这样我以后可以使用它们进行比较 我尝试将时间元组转换为datetime,然后再转换回datetime,但转换回时不一样: dt = datetime.fromtimestamp(time.mktime(stru

我正在使用python的feedparser模块来解析RSS提要。解析后,feedparser以python 9元组时间格式(time.struct_time)返回日期

我想将这些值存储在mysql数据库中,以便以后检查提要的格式。重要的是,如果时间元组被转换,当转换回来时,它们保持不变,这样我以后可以使用它们进行比较

我尝试将时间元组转换为datetime,然后再转换回datetime,但转换回时不一样:

dt = datetime.fromtimestamp(time.mktime(struct))
time_tuple = dt.timetuple()

您认为这样做的方法是什么?

在数据库中将日期时间与时区一起存储为UTC。如果需要,在从数据库中提取时将其转换回本地时间。

我认为您的方法不保留时间元组的原因是因为
is u dst
值已更改
time.mktime
struct
中尊重
isdst
,但
dt.timetuple
isdst
更改为-1

避免此错误的一种方法是将时间元组解释为表示UTC时间。这可能不是严格正确的,但对于您的目的来说可能已经足够好了

In [1]: import datetime as dt
In [2]: import time
In [3]: import calendar

In [17]: time_tuple=(1970, 1, 1, 0, 0, 0, 3, 1, 1)

In [18]: timestamp=calendar.timegm(time_tuple)
In [19]: timestamp
Out[19]: 0

In [20]: date=dt.datetime.utcfromtimestamp(timestamp)
In [21]: date
Out[21]: datetime.datetime(1970, 1, 1, 0, 0)

In [22]: tuple(date.timetuple())
Out[22]: (1970, 1, 1, 0, 0, 0, 3, 1, -1)
这里有一个例子,说明你发布的方法可能无法保留时间元组。假设远程服务器所在的区域设置为dst=1,而您所在的区域设置为dst=0:

In [11]: time_tuple=(1970, 1, 1, 0, 0, 0, 3, 1, 1)

In [12]: timestamp=time.mktime(time_tuple)
In [13]: timestamp
Out[13]: 14400.0

In [14]: date=dt.datetime.fromtimestamp(timestamp)
In [15]: date
Out[15]: datetime.datetime(1969, 12, 31, 23, 0)

In [16]: tuple(date.timetuple())
Out[16]: (1969, 12, 31, 23, 0, 0, 2, 365, -1)

calendar.timegm
最终帮助了我。谢谢