Python中是否有将日期转换为日期时间的内置方法,例如获取给定日期的午夜日期时间?相反的转换很容易:datetime有一个.date()方法。
我真的需要手动调用datetime(d。年,月,日)?
Python中是否有将日期转换为日期时间的内置方法,例如获取给定日期的午夜日期时间?相反的转换很容易:datetime有一个.date()方法。
我真的需要手动调用datetime(d。年,月,日)?
有几种方法,尽管我相信你提到的(和不喜欢的)是最易读的。
>>> import datetime
>>> t=datetime.date.today()
>>> datetime.datetime.fromordinal(t.toordinal())
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(t.year, t.month, t.day)
datetime.datetime(2009, 12, 20, 0, 0)
>>> datetime.datetime(*t.timetuple()[:-4])
datetime.datetime(2009, 12, 20, 0, 0)
等等——但基本上它们都依赖于从date对象中适当地提取信息,并将其返回到datetime的适当的ctor或类函数中。
你可以使用date.timetuple()方法和解包操作符*。
args = d.timetuple()[:6]
datetime.datetime(*args)
你可以使用datetime.combine(date, time);对于时间,您创建了一个datetime。时间对象初始化为午夜。
from datetime import date
from datetime import datetime
dt = datetime.combine(date.today(), datetime.min.time())
我是Python的新手。但是这段代码为我工作,它将我提供的指定输入转换为datetime。这是代码。如果我说错了,请指正。
import sys
from datetime import datetime
from time import mktime, strptime
user_date = '02/15/1989'
if user_date is not None:
user_date = datetime.strptime(user_date,"%m/%d/%Y")
else:
user_date = datetime.now()
print user_date
公认的答案是正确的,但我更倾向于避免使用datetime.min.time(),因为它的确切功能对我来说并不明显。如果这对你来说很明显,那你就更有力量。我对timetuple方法和对排序的依赖也有同样的感觉。
在我看来,在不依赖读者非常熟悉datetime模块API的情况下,最易读的、显式的方法是:
from datetime import date, datetime
today = date.today()
today_with_time = datetime(
year=today.year,
month=today.month,
day=today.day,
)
这就是我对“显性比隐性好”的看法。
一种从日期转换到日期时间的方法还没有提到:
from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
你可以使用easy_date来简化:
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)
今天是2016年,我认为熊猫提供了最干净的解决方案。
from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)
时间戳是熊猫版的datetime,在大多数情况下可以与它互换。检查:
from datetime import datetime
isinstance(pd.Timestamp(d), datetime)
但如果你真的想要一个香草日期时间,你仍然可以这样做:
pd.Timestamp(d).to_datetime()
在处理时区时,时间戳比datetimes强大得多。实际上,时间戳是如此强大,以至于遗憾的是它们的文档记录如此之少……
我真的需要手动调用datetime(d。年,月,日)
不,你更想打电话
date_to_datetime(dt)
你可以在项目中的一些utils/time.py中实现一次:
from typing import Optional
from datetime import date, datetime
def date_to_datetime(
dt: date,
hour: Optional[int] = 0,
minute: Optional[int] = 0,
second: Optional[int] = 0) -> datetime:
return datetime(dt.year, dt.month, dt.day, hour, minute, second)
你可以使用这个类:
import time
import datetime
class TimingClass():
def __init__(self):
self.YEAR = datetime.date.today().year
self.MONTH = datetime.date.today().month
self.DATE = datetime.date.today().day
self.HOUR = datetime.datetime.now().hour
self.MINUTE = datetime.datetime.now().minute
self.SECONDS = datetime.datetime.now().second
self.TODAY = datetime.date.today()
self.YESTERDAY = datetime.datetime.strftime( (self.TODAY - datetime.timedelta(days = 1)) , '%Y-%m-%d')
self.TOMORROW = datetime.datetime.strftime( (self.TODAY + datetime.timedelta(days = 1)) , '%Y-%m-%d')
self.TODAY_datetime = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time())
你也可以使用
date = datetime.utcnow().date()
dt = datetime.fromisoformat(date.isoformat())
print(dt)
datetime.datetime(2021, 11, 15, 0, 0)
使用Django timezone util使dt能够感知datetime时区:
from django.utils import timezone
timezone.now().replace(*(*dt.timetuple()[:6], 0))
toisoformat/fromisoformat的替代方案:您可以使用date。Toordinal和datetime.fromordinal:
import datetime
start_date = datetime.date(1991, 2, 20)
start_date_midnight = datetime.datetime.fromordinal(start_date.toordinal())
我怀疑这比转换到/从字符串更有效。
你可以这样测试这个过程:
def test_datetime_from_date():
for x in range(1,1000000):
date_ = datetime.date.fromordinal(x)
datetime_ = datetime.datetime.fromordinal(date_.toordinal())
datetime_iso_date, t, datetime_iso_time = datetime_.isoformat().partition("T")
assert datetime_iso_date == date_.isoformat()