【问题标题】:Have a list of hours between two dates in python在python中有两个日期之间的小时列表
【发布时间】:2017-11-24 19:27:35
【问题描述】:

我有两次,我想在 Python 中使用相同的格式列出它们之间的所有时间

from= '2016-12-02T11:00:00.000Z'
to= '2017-06-06T07:00:00.000Z'
hours=to-from

所以结果会是这样的 2016-12-02T11:00:00.000Z 2016-12-02T12:00:00.000Z 2016-12-02T13:00:00.000Z ..... 等等 我该怎么做?我应该使用什么样的插件?

【问题讨论】:

  • from datetime import timedelta。应该有帮助。
  • from 是一个内置词
  • 您不能减去str 对象,请改用datetime 对象
  • 结果范围应包括to?
  • 我们是否应该截断分钟/秒/...如果它们不为零?

标签: python python-2.7 date time datetime-format


【解决方案1】:

如果可能的话,我会推荐使用 pandas。

import pandas
time_range = pandas.date_range('2016-12-02T11:00:00.000Z', '2017-06-06T07:00:00.000Z', freq='H')

如果您需要字符串,请使用以下内容:

timestamps = [str(x) + 'Z' for x in time_range]
# Output
# ['2016-12-02 11:00:00+00:00Z',
#  '2016-12-02 12:00:00+00:00Z',
#  '2016-12-02 13:00:00+00:00Z',
#  '2016-12-02 14:00:00+00:00Z',
#  '2016-12-02 15:00:00+00:00Z',
#  '2016-12-02 16:00:00+00:00Z',
#  ...]

【讨论】:

  • 听起来既有趣又简单!但是如何下载呢?
  • pip install pandas 应该可以解决问题,具体取决于您使用的 Python 平台和版本。
  • 我已经下载了它,它可以工作了!但是,当我打印 time_range 时,它​​似乎不是常规列表,如何将其转换为列表?!
  • 你看到我的编辑了吗?列表理解timestamps = [str(x) + 'Z' for x in time_range]。应该给你一个你想要的格式的字符串列表。
【解决方案2】:

使用标准库的datetime 包的更简单的解决方案:

from datetime import datetime, timedelta

DATE_TIME_STRING_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'

from_date_time = datetime.strptime('2016-12-02T11:00:00.000Z',
                                   DATE_TIME_STRING_FORMAT)
to_date_time = datetime.strptime('2017-06-06T07:00:00.000Z',
                                 DATE_TIME_STRING_FORMAT)

date_times = [from_date_time.strftime(DATE_TIME_STRING_FORMAT)]
date_time = from_date_time
while date_time < to_date_time:
    date_time += timedelta(hours=1)
    date_times.append(date_time.strftime(DATE_TIME_STRING_FORMAT))

会给我们

>>>date_times
['2016-12-02T11:00:00.000000Z', 
 '2016-12-02T12:00:00.000000Z',
 '2016-12-02T13:00:00.000000Z', 
 '2016-12-02T14:00:00.000000Z',
 '2016-12-02T15:00:00.000000Z', 
 '2016-12-02T16:00:00.000000Z',
 '2016-12-02T17:00:00.000000Z', 
 '2016-12-02T18:00:00.000000Z',
 '2016-12-02T19:00:00.000000Z', 
 '2016-12-02T20:00:00.000000Z',
 ...]

【讨论】:

  • 如何在java中做同样的事情?
  • @Abhilash:您可以提出不同的问题或查看this thread
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 2021-02-15
  • 2022-06-10
  • 2022-01-22
  • 2020-07-24
相关资源
最近更新 更多