Python中把date转datetime

Convert date to datetime in Python

在python中是否有一种内置的方法可以将date转换为datetime,例如在给定日期的午夜获取datetime?相反的转换很容易:datetime有一个.date()方法。

我真的需要手动打电话给datetime(d.year, d.month, d.day)吗?


可以使用date time.combine(日期、时间);对于时间,可以创建一个初始化为午夜的datetime.time对象。

1
2
3
4
from datetime import date
from datetime import datetime
d = date.today()
datetime.combine(d, datetime.min.time())


有几种方法,尽管我相信你提到的(和不喜欢的)是最易读的。

1
2
3
4
5
6
7
>>> 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或classfunction中。


接受的答案是正确的,但我宁愿避免使用datetime.min.time(),因为我并不清楚它到底做了什么。如果这对你来说很明显,那就给你更多的力量。我对timetuple方法和对订单的依赖也有同样的感觉。

在我看来,在不依赖于读者非常熟悉datetime模块API的情况下进行此操作的最易读、最明确的方法是:

1
2
3
4
5
6
7
from datetime import date, datetime
today = date.today()
today_with_time = datetime(
    year=today.year,
    month=today.month,
    day=today.day,
)

这就是我对"显性优于隐性"的看法。


您可以使用date.timetuple()方法和解包操作符*

1
2
args = d.timetuple()[:6]
datetime.datetime(*args)


今天是2016年,我认为最干净的解决方案是由熊猫时间戳提供的:

1
2
3
4
from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

timestamp是与datetime等效的panda,在大多数情况下可以与之交换。检查:

1
2
from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

但是,如果您真的想要一个普通的日期时间,您仍然可以这样做:

1
pd.Timestamp(d).to_datetime()

在处理时区时,时间戳比日期时间要强大得多。实际上,时间戳是如此强大,以至于遗憾的是,它们的文档记录得如此糟糕…


将尚未提到的日期转换为日期时间的一种方法:

1
2
3
from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')


您可以使用简单的日期来简化:

1
2
import date_converter
my_datetime = date_converter.date_to_datetime(my_date)

使用pandas将一系列日期转换为python日期时间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dates = pd.DataFrame(
    {'date': pd.DatetimeIndex(start='2017-01-01', end='2017-01-5', freq='D')})
>>> dates
        date
0 2017-01-01
1 2017-01-02
2 2017-01-03
3 2017-01-04
4 2017-01-05

>>> pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()
[datetime.datetime(2017, 1, 1, 0, 0),
 datetime.datetime(2017, 1, 2, 0, 0),
 datetime.datetime(2017, 1, 3, 0, 0),
 datetime.datetime(2017, 1, 4, 0, 0),
 datetime.datetime(2017, 1, 5, 0, 0)]

可能首先需要转换日期:

1
2
3
4
dates = pd.DataFrame(
        {'date': ['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05']})
dates['date'] = pd.DatetimeIndex(dates['date'])
pd.DatetimeIndex(dates['date']).to_pydatetime().tolist()

如果您需要快速的东西,datetime_object.date()会给您一个日期时间对象的日期。


我是Python的新手。但这段代码对我很有用,它将我提供的指定输入转换为datetime。这是密码。如果我错了就纠正我。

1
2
3
4
5
6
7
8
9
10
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