python - python3.9 vs.python3.6中的timedelta问题
问题描述
我在名为“GPS_Date.py”的文件中有以下类:
import datetime
from math import floor
class GPS_Date(datetime.datetime):
ref_date = datetime.datetime(1980, 1, 6)
def __init__(self, year, month, day, hour=0, minute=0, second=0):
datetime.datetime.__init__(year, month, day, hour, minute, second)
def gps_week(self):
difftime = self-self.ref_date
return floor(difftime.days / 7)
def day_of_week(self):
difftime = self-self.ref_date
return difftime.days % 7
def day_of_year(self):
return self.timetuple().tm_yday
@staticmethod
def to_GPS_date(date):
return GPS_Date(date.year, date.month, date.day, date.hour, date.minute, date.second)
@staticmethod
def now():
return GPS_Date.to_GPS_date(datetime.datetime.utcnow())
当我在 python3.6 中运行以下代码时,我得到了正确的解决方案:
import datetime
from GPS_Date import GPS_Date
time_string = '2019-01-01 23:59:30.0'
date_format = '%Y-%m-%d %H:%M:%S.%f'
time_1 = datetime.datetime.strptime(time_string, date_format)
time_2 = GPS_Date.to_GPS_date(time_1)
add_time = time_2 + datetime.timedelta(minutes=30)
但是当我用 python3.9 运行它时,我得到以下错误:
add_time = time_2 + datetime.timedelta(minutes=30)
TypeError: __init__() takes from 4 to 7 positional arguments but 9 were given
我假设 python3.6 和 python3.9 之间发生了一些变化。我查看了文档,但没有找到任何东西。任何人都可以启发我吗?
解决方案
datetime.datetime
GPS_Date
确实有比帐户(即tzinfo
和)更多的参数可以传递fold
。为什么这不会在 Python3.6 中爆炸,我不确定。但是您根本不需要覆盖__init__
,因为您没有做任何事情:
class GPS_Date(datetime.datetime):
ref_date = datetime.datetime(1980, 1, 6)
def gps_week(self):
difftime = self - self.ref_date
return floor(difftime.days / 7)
def day_of_week(self):
difftime = self - self.ref_date
return difftime.days % 7
def day_of_year(self):
return self.timetuple().tm_yday
@staticmethod
def to_GPS_date(date):
return GPS_Date(date.year, date.month, date.day, date.hour, date.minute, date.second)
@staticmethod
def now():
return GPS_Date.to_GPS_date(datetime.datetime.utcnow())
很好。(另请注意:如果您要执行某些操作,则需要覆盖__new__
而不是__init__
)
推荐阅读
- java - 在 HttpURLConnection 中容纳 HTTPS 连接
- c++ - SAssetView Slate 编译错误
- linux - 如果某些必需的文件是不同的目录,我如何在任何地方执行命令?
- gemfire - 通过部分键查询 GemFire 区域
- perl - 如何使用 Selenium::Remote::Driver 获得自动完成结果
- shell - 当文件名中有空格时,来自 shell 脚本的动态 mv 命令似乎不起作用
- jquery - Jquery Ajax 删除调用返回 404 未找到
- javascript - 我的反应应用程序给出“动作未定义”的错误
- reactjs - 在更改期间是否将 React 状态属性设置为未定义?
- html - 如何在引导程序 4 中使下拉菜单的宽度等于其父级的宽度