首页 文章

在Python中将日期转换为日期时间

提问于
浏览
485

愚蠢的问题,但有一个内置的方法,用于在Python中将 date 转换为 datetime ,即 . 在 date 的午夜得到 datetime ?相反的转换很容易 - datetime 有一个 .date() 方法 . 我真的要手动拨打 datetime(d.year, d.month, d.day) 吗?

10 回答

  • 5

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

    from datetime import date
    from datetime import datetime
    d = date.today()
    datetime.combine(d, datetime.min.time())
    
  • 4

    有几种方法,虽然我确实相信你提到的(并且不喜欢)是最可读的方式 .

    >>> 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 对象中适当地提取信息并将其转换回合适的ctor或类功能 datetime .

  • -10

    接受的答案是正确的,但我宁愿避免使用 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,
    )
    

    这是我对“明确比隐含更好”的看法 .

  • -7

    您可以使用 date.timetuple() 方法并解压缩运算符 * .

    args = d.timetuple()[:6]
    datetime.datetime(*args)
    
  • 0

    今天是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()
    

    时间戳比日期时更强大,尤其是在处理时区时 . 实际上,时间戳是如此强大,以至于它们的记录如此糟糕......

  • 40

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

    from datetime import date, datetime
    d = date.today()
    datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')
    
  • 48

    您可以使用easy_date轻松实现:

    import date_converter
    my_datetime = date_converter.date_to_datetime(my_date)
    
  • 607

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

    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)]
    

    可能首先需要转换日期:

    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()
    
  • 3

    如果您需要快速的东西, datetime_object.date() 会为您提供日期时间对象的日期 .

  • 99

    我是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
    

相关问题