Python 在日期时间和时间戳对象之间转换

Python 在日期时间和时间戳对象之间转换,python,datetime,pandas,Python,Datetime,Pandas,我有以下资料: > date1 Timestamp('2014-01-23 00:00:00', tz=None) > date2 datetime.date(2014, 3, 26) import time, calendar, pandas as pd from datetime import datetime def to_posix_ts(d: datetime, utc:bool=True) -> float: t

我有以下资料:

> date1
Timestamp('2014-01-23 00:00:00', tz=None)

> date2
datetime.date(2014, 3, 26)
    import time, calendar, pandas as pd
    from datetime import datetime
    
    def to_posix_ts(d: datetime, utc:bool=True) -> float:
        tt=d.timetuple()
        return (calendar.timegm(tt) if utc else time.mktime(tt)) + round(d.microsecond/1000000, 0)
    
    def pd_timestamp_from_datetime(d: datetime) -> pd.Timestamp:
        return pd.to_datetime(to_posix_ts(d), unit='s')
    
    dt = pd_timestamp_from_datetime(datetime.now())
    print('({}) {}'.format(type(dt), dt))
我读到我可以使用
pandas.to_datetime()
时间戳
转换为
datetime
对象,但它似乎不起作用:

> pd.to_datetime(date1)   
Timestamp('2014-01-23 00:00:00', tz=None)

为什么??如何在这两种格式之间进行转换?

您可以使用to_pydatetime方法来更加明确:

>>> pd.Timestamp('2014-01-23 00:00:00', tz=None).to_datetime()
datetime.datetime(2014, 1, 23, 0, 0)
>>> pd.Timestamp(datetime.date(2014, 3, 26))
Timestamp('2014-03-26 00:00:00')
In [11]: ts = pd.Timestamp('2014-01-23 00:00:00', tz=None)

In [12]: ts.to_pydatetime()
Out[12]: datetime.datetime(2014, 1, 23, 0, 0)
也可以在DatetimeIndex上找到:

In [13]: rng = pd.date_range('1/10/2011', periods=3, freq='D')

In [14]: rng.to_pydatetime()
Out[14]:
array([datetime.datetime(2011, 1, 10, 0, 0),
       datetime.datetime(2011, 1, 11, 0, 0),
       datetime.datetime(2011, 1, 12, 0, 0)], dtype=object)
datetime.datetime的时间戳:

datetime.datetime到时间戳


要回答从现有python转换为pandas的问题,请执行以下操作:

> date1
Timestamp('2014-01-23 00:00:00', tz=None)

> date2
datetime.date(2014, 3, 26)
    import time, calendar, pandas as pd
    from datetime import datetime
    
    def to_posix_ts(d: datetime, utc:bool=True) -> float:
        tt=d.timetuple()
        return (calendar.timegm(tt) if utc else time.mktime(tt)) + round(d.microsecond/1000000, 0)
    
    def pd_timestamp_from_datetime(d: datetime) -> pd.Timestamp:
        return pd.to_datetime(to_posix_ts(d), unit='s')
    
    dt = pd_timestamp_from_datetime(datetime.now())
    print('({}) {}'.format(type(dt), dt))
输出:

(<class 'pandas._libs.tslibs.timestamps.Timestamp'>) 2020-09-05 23:38:55
()2020-09-05 23:38:55

我希望有一种更优雅的方法来实现这一点,但是
to_posix_ts
已经在我的标准工具链中,所以我要继续了。

谢谢-我想应该将
to_datetime
作为对象方法运行,而不是作为类方法运行,但是为什么呢?@user815423426它似乎与其名称
pd相反。to_datetime
总是返回
Timestamp
在0.24上不起作用。表示
'Timestamp'对象没有属性“to_datetime”
@Phoenix,您要查找的方法是
to_pydatetime()
。谢谢。您知道
to_datetime()
to_pydatetime()
之间的区别吗?为什么将
Timestamp
对象传递给类方法
pd.to_datetime
不起作用?@user815423426它在全局名称函数(pd.to_datetime(ts))上起作用。。。区别在于to_pydatetime返回一个datetime:)