在UTC中创建可由Matplotlib导入的不带时区的日期时间对象



我有一个以这种方式创建的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中使用这些对象。根据文档,它期望以下日期时间对象:

日期格式通常,在Python程序中,日期被表示为datetime对象,因此我们必须首先将其他数据值转换为datetime对象,有时可以使用dateutil配套模块,例如:

导入日期时间

date=datetime.datetime(2009,03,28,11,34,59,12345)

导入日期实用程序解析程序

日期字符串='2008-07-18 14:36:53.494013','2008-07-2014:37:01.508990','08-07-28 14:49:26.183256']

dates=[dateutil.parser.parse(s)for s in datestrings]

一旦我们有了日期时间对象,为了让Matplotlib使用它们,我们必须将它们转换为浮点数字,表示自0001-01-01 00:00:00 UTC以来的天数。

为此,Matplotlib本身提供了包含在Matplotlib.dates模块中的几个辅助函数:

•date2num():此函数将一个或一系列日期时间对象转换为浮点值,表示自0001-01-01 00:00:00 UTC以来的天数(小数部分表示小时、分钟和秒)

(摘自Python开发人员的Matplotlib,Sandro Tosi,编辑。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期望的格式

如何导入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

相关内容

  • 没有找到相关文章

最新更新