Python日期时间在美国和英国日期格式之间切换

时间:2016-08-02 08:53:50

标签: python python-datetime

我使用matplotlib绘制从CSV文件导入的一些数据。这些文件具有以下格式:

Date,Time,A,B
25/07/2016,13:04:31,5,25550
25/07/2016,13:05:01,0,25568
....
01/08/2016,19:06:43,0,68425

日期格式与英国相同,即%d/%m/%Y。最终结果是有两个图:A如何随时间变化,以及B如何随时间变化之一。我是这样导入CSV的数据:

import matplotlib
matplotlib.use('Agg')
from matplotlib.mlab import csv2rec
import matplotlib.pyplot as plt
from datetime import datetime
import sys
...

def analyze_log(file, y):
    data = csv2rec(open(file, 'rb'))

    fig = plt.figure()

    date_vec = [datetime.strptime(str(x), '%Y-%m-%d').date() for x in data['date']]
    print date_vec[0]
    print date_vec[len(date_vec)-1]

    time_vec = [datetime.strptime(str(x), '%Y-%m-%d %X').time() for x in data['time']]
    print time_vec[0]
    print time_vec[len(time_vec)-1]

    datetime_vec = [datetime.combine(d, t) for d, t in zip(date_vec, time_vec)]
    print datetime_vec[0]
    print datetime_vec[len(datetime_vec)-1]

    y_vec = data[y]
    plt.plot(datetime_vec, y_vec)

    ...
    # formatters, axis headers, etc.
    ...
    return plt

8月1日之前一切正常。但是,从那以后,matplotlib试图将我的01/08/2016数据点绘制为2016-01-08(1月8日)!

我得到了一个绘图错误,因为它试图从1月到7月进行绘图:

RuntimeError: RRuleLocator estimated to generate 4879 ticks from 2016-01-08 09:11:00+00:00 to 2016-07-29 16:22:34+00:00:

超过Locator.MAXTICKS * 2(2000)

我在这里做错了什么?上面代码中的print语句的结果是:

2016-07-25
2016-01-08 #!!!!
13:04:31
19:06:43
2016-07-25 13:04:31
2016-01-08 19:06:43 #!!!!

2 个答案:

答案 0 :(得分:1)

Matplotlib的csv2rec函数已经解析了你的日期,并在解析日期时尝试变得聪明。该函数有两个选项来影响解析,dayfirst应该有帮助:

  

dayfirst:默认为False,因此MM-DD-YY优先于DD-MM-YY。

     

yearfirst:默认为False,因此MM-DD-YY优先于YY-MM-DD。

     

有关详细信息,请参阅http://labix.org/python-dateutil#head-b95ce2094d189a89f80f5ae52a05b4ab7b41af47

答案 1 :(得分:0)

您正在使用%d/%m/%Y格式的字符串,但您已将格式说明符指定为%Y-%m-%d