在UTC创建日期时间对象,而不时区可以由Matplotlib进口

问题描述 投票:0回答:1

我有创建这样datetime对象的列表:

from datetime import datetime
import pytz

_year = 2018
_month = 2
_day = 3
_hour = 14
_minute = 30
csv_timezone = pytz.timezone('Europe/Berlin')

csv_dt = datetime(_year, _month, _day, _hour, _minute)
print('csv_dt')
print(csv_dt)

后来我想在UTC的Matplotlib消费:

utc_dt = csv_timezone.localize(csv_dt).astimezone(pytz.utc)
print('utc_dt')
print(utc_dt)

结果如下:

csv_dt
2018-02-03 14:30:00
utc_dt
2018-02-03 13:30:00+00:00

如前所述,我想使用Matplotlib这些对象。其中,作为每个文档,需要下列DateTime对象:

日期的格式通常,在Python程序,日期被表示为datetime对象,所以我们必须先其他数据值转换成datetime对象,有时使用dateutil伴侣模块,例如:

进口日期时间

日期= datetime.datetime(2009年,03,28,11,34,59,12345)

要么

进口dateutil.parser

datestrings = [ '2008-07-18 14:36:53.494013', '2008-07-2014:37:01.508990', '2008-07-28 14:49:26.183256']

日期= [dateutil.parser.parse(个),S IN datestrings]

一旦我们有了datetime对象,为了让Matplotlib使用它们,我们必须将它们转换成浮动代表自0001-01-01 00:00:00 UTC天数点数。

要做到这一点,Matplotlib本身提供包含matplotlib.dates模块中的几个辅助函数:

•date2num():该函数将一个或日期时间的对象的序列,因为0001-01-01 00:00:00 UTC(小数部分表示时,分和秒),以浮动表示天数的值

(摘自Matplotlib为Python开发者,桑德罗托西,埃德。PACKT PUBLISHING 2009年第95页)

因此,我不明白为什么datetime对象date2num函数应具有以下形式:

2008-07-20 14:37:01.508990

虽然一个我产生了这样的形式:

2018-02-03 13:30:00+00:00

我得到的错误是:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-7d0a84cb48da> in <module>
     20 
     21 # Convert to matplotlib required
---> 22 mpl_times =  mpl.dates.date2num(times)
     23 
     24 plt.figure()

times是:

<class 'numpy.ndarray'>
times
['2018-01-12 07:00:00+01:00', '2018-01-12 07:01:00+01:00', '2018-01-12 07:02:00+01:00' ..... ]

我怎么会从我的格式转换成date2num期望的格式?

python datetime matplotlib timezone pytz
1个回答
1
投票

如何导入matplotlib.dates?你能试一下吗

    from matplotlib import dates as dt
    ....
    ....
    mpl_times =  dt.date2num(times)

下面的代码对我的作品

    from datetime import datetime
    import pytz
    from matplotlib import dates as dt

    _year = 2018
    _month = 2
    _day = 3
    _hour = 14
    _minute = 30
    csv_timezone = pytz.timezone('Europe/Berlin')

    csv_dt = datetime(_year, _month, _day, _hour, _minute)
    print('csv_dt')
    print(csv_dt)

    utc_dt = csv_timezone.localize(csv_dt).astimezone(pytz.utc)
    print('utc_dt')
    print(utc_dt)
    print (dt.date2num(utc_dt))

输出是736728.5625

© www.soinside.com 2019 - 2024. All rights reserved.