python - 给定时间原点,如何将日期时间从十进制转换为“%y-%m-%d %H:%M:%S”?
问题描述
我四处搜索,但找不到满足我问题的答案。
我正在使用 python 3.7,我需要将一系列十进制数字转换为 datetime 形式的对象%Y-%m-%d %H:%M:%S
。这样做时,我需要考虑一个原点,例如:
t = 0.000000
等于2016-06-25 00:00:00
t = 0.010417
等于……?
等等。我知道在我的十进制时间中,整数部分是自开始以来的天数,小数部分是天数的小数部分。
我在这里找到了使用 R 的答案。我也认为我可能需要使用类方法date.fromordinal(ordinal)
或类似的东西,但我不知道该怎么做。
这是我到目前为止所尝试的:
例子t = 1.010416
import datetime as DT
from datetime import timedelta
day = int(x)
datetime_object = DT.datetime.strptime("2016-06-25 00:00:00", '%Y-%m-%d %H:%M:%S')
python_datetime = DT.datetime.fromordinal(day) + timedelta(days=datetime_object.day-1)
我得到:
datetime.datetime(1, 1, 25, 0, 0)
但我不能添加 2016 年或月份。此外,对于每种情况int(t) = 0
,我得到:
ValueError:序数必须> = 1
非常感谢您的回答
解决方案
只是在这里留下一个明确的答案,考虑到我对其他答案的评论:
from datetime import datetime,timedelta
base_date = datetime(2016, 6, 25)
deltas = (2.34857, 0.010417, 1.010416)
for delta in deltas:
print((base_date + timedelta(delta)).strftime('%Y-%m-%d %H:%M:%S'))
该代码产生以下输出:
>>> from datetime import datetime,timedelta
>>>
>>> base_date = datetime(2016, 6, 25)
>>> deltas = (2.34857, 0.010417, 1.010416)
>>>
>>> for delta in deltas:
... print((base_date + timedelta(delta)).strftime('%Y-%m-%d %H:%M:%S'))
...
2016-06-27 08:21:56
2016-06-25 00:15:00
2016-06-26 00:14:59
>>>
推荐阅读
- c++ - Clearcase vobs 中的 Eclipse C++:未解决的包含
- amazon-web-services - API 网关使用 HTTPS 调用我的弹性 beanstalk 环境
- batch-file - FOR命令中使用的随机数相同
- javascript - 使用 Jquery 提高侧边栏的滚动速度
- javascript - 如何更快地完成一系列承诺
- flutter - 如何从 Stream 访问参数
- vb.net - 程序首先在不可见的图片框上绘图,然后图片框变得可见,尽管可见性应该首先出现,然后是动态绘图
- javascript - 如何检查一个函数是否在节点的工作线程中运行?
- python - 如何为 Autodesk Maya OSX 将 py 文件编译为 .so
- arrays - 切片变长字符数组