【问题标题】:Python generate dates seriesPython 生成日期系列
【发布时间】:2011-05-27 15:49:48
【问题描述】:

如何生成具有这样日期的数组:

从 2010.12.01 00:00:00 到 2010.12.12.30 23.59.59 的 javascript 毫秒格式的时间戳 步骤 5 分钟。

['2010.12.01 00:00:00', '2010.12.01 00:05:00','2010.12.01 00:10:00','2010.12.01 00:15:00', ...]

【问题讨论】:

    标签: python datetime timestamp


    【解决方案1】:

    我只是觉得值得一提的是pandas 也有这个功能。根据您正在处理的具体情况,pandas 可能是一个值得投入时间的工具。

    import pandas as pd 
    times = pd.date_range('2012-10-01', periods=289, freq='5min')
    

    这将返回一个熊猫时间序列索引。可以将其转换为 numpy 数组。

    np.array(times)
    

    【讨论】:

      【解决方案2】:

      嗯,显然你从开始时间开始,循环直到你到达结束时间并在中间增加。

      import datetime
      
      dt = datetime.datetime(2010, 12, 1)
      end = datetime.datetime(2010, 12, 30, 23, 59, 59)
      step = datetime.timedelta(seconds=5)
      
      result = []
      
      while dt < end:
          result.append(dt.strftime('%Y-%m-%d %H:%M:%S'))
          dt += step
      

      相当琐碎。

      【讨论】:

      • 格式字符串应为'%Y.%m.%d ...' 严格匹配问题。
      • 好吧,我不是来执行规范的,我为此收费。 :)
      【解决方案3】:

      这是我的python3变种,但很容易可以转换成python2.6代码:

      import datetime as dt
      
      dt1 = dt.datetime(2010, 12, 1)
      dt2 = dt.datetime(2010, 12, 12, 23, 59, 59)
      
      time_step = 5 # secoonds
      delta = dt2 - dt1
      
      delta_sec = delta.days * 24 * 60 * 60 + delta.seconds
      
      res = [dt1 + dt.timedelta(0, t) for t in range(0, delta_sec, time_step)]
      

      【讨论】:

      • 我错过了这个答案中的一件事:数组的元素是日期,而不是字符串......它可以通过以下方式修复:str(dt1 + dt.timedelta(0, t)) .. . 结果的格式就是你所需要的
      • 无需转换,可在 Python 2 和 3 中运行(就像我的示例一样)。
      • 在python2中最好使用xrange,而不是range
      • 当然可以,但有 50 万个 int 对象会在内存中停留几秒钟。如果您没有该内存,则需要一台新计算机。 ;)
      猜你喜欢
      • 2021-12-19
      • 2019-04-13
      • 2012-12-15
      • 1970-01-01
      • 2021-06-01
      • 2020-12-24
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多