微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何正确地在两个日期时间Python之间按小时正确生成UTC时间戳列表?

如何解决如何正确地在两个日期时间Python之间按小时正确生成UTC时间戳列表?

我是Python的新手。经过几天的研究和尝试,我找到了一个不错的解决方案,可以为两个日期之间的每个小时创建一个时间戳列表。

示例:

_getEmail().then((value) {
      emailFieldController.text = value;
   });

产生的结果:

import datetime
from datetime import datetime,timedelta

timestamp_format = '%Y-%m-%dT%H:%M:%s%z'

earliest_ts_str = '2020-10-01T15:00:00Z'
earliest_ts_obj = datetime.strptime(earliest_ts_str,timestamp_format)

latest_ts_str = '2020-10-02T00:00:00Z'
latest_ts_obj = datetime.strptime(latest_ts_str,timestamp_format)

num_days = latest_ts_obj - earliest_ts_obj
num_hours = int(round(num_days.total_seconds() / 3600,0))

ts_raw = []
for ts in range(num_hours):
    ts_raw.append(latest_ts_obj - timedelta(hours = ts + 1))

dates_formatted = [d.strftime('%Y-%m-%dT%H:%M:%sZ') for d in ts_raw]

# Need timestamps in ascending order
dates_formatted.reverse()

dates_formatted

问题:

  • 如果我将['2020-10-01T00:00:00Z','2020-10-01T01:00:00Z','2020-10-01T02:00:00Z','2020-10-01T03:00:00Z','2020-10-01T04:00:00Z','2020-10-01T05:00:00Z','2020-10-01T06:00:00Z','2020-10-01T07:00:00Z','2020-10-01T08:00:00Z','2020-10-01T09:00:00Z','2020-10-01T10:00:00Z','2020-10-01T11:00:00Z','2020-10-01T12:00:00Z','2020-10-01T13:00:00Z','2020-10-01T14:00:00Z','2020-10-01T15:00:00Z','2020-10-01T16:00:00Z','2020-10-01T17:00:00Z','2020-10-01T18:00:00Z','2020-10-01T19:00:00Z','2020-10-01T20:00:00Z','2020-10-01T21:00:00Z','2020-10-01T22:00:00Z','2020-10-01T23:00:00Z'] 更改为包括分钟,例如earliest_ts_str,则结果列表不会相应地增加分钟间隔。

结果:

earliest_ts_str = '2020-10-01T19:45:00Z'

我需要这样:

['2020-10-01T20:00:00Z','2020-10-01T23:00:00Z']

感觉问题出在['2020-10-01T20:45:00Z','2020-10-01T21:45:00Z','2020-10-01T22:45:00Z','2020-10-01T23:45:00Z'] num_days的计算中,但是我看不出如何解决它。

想法?

解决方法

如果您不介意使用第三方包装,请查看pandas.date_range

import pandas as pd

earliest,latest = '2020-10-01T15:45:00Z','2020-10-02T00:00:00Z'

dti = pd.date_range(earliest,latest,freq='H') # just specify hourly frequency...
l = dti.strftime('%Y-%m-%dT%H:%M:%SZ').to_list()
print(l)
# ['2020-10-01T15:45:00Z','2020-10-01T16:45:00Z','2020-10-01T17:45:00Z','2020-10-01T18:45:00Z','2020-10-01T19:45:00Z','2020-10-01T20:45:00Z','2020-10-01T21:45:00Z','2020-10-01T22:45:00Z','2020-10-01T23:45:00Z']
,

只是改变

num_hours = num_days.days*24 + num_days.seconds//3600

问题在于num_days仅接受整数值,因此,如果不是24h的倍数,您将获得下限值(例如,您将获得0)。因此,为了计算小时数,您需要同时使用天数和秒数。

此外,您可以按正确的顺序直接创建列表,由于不确定的原因,我不确定是否这样做。

ts_raw.append(earliest_ts_obj + timedelta(hours = ts + 1))
,
$output= round($number,2,PHP_ROUND_HALF_DOWN);

$output= sprintf('%00.02f',$number);

$output= str_pad($number,5,'0',STR_PAD_LEFT);

编辑:

以下是Maya

的示例
$output=sprintf("%05.2f",floor($number*100)/100); 

两个输出

import datetime
from datetime import datetime,timedelta

timestamp_format = '%Y-%m-%dT%H:%M:%S%z'

earliest_ts_str = '2020-10-01T00:00:00Z'
ts_obj = datetime.strptime(earliest_ts_str,timestamp_format)

latest_ts_str = '2020-10-02T00:00:00Z'
latest_ts_obj = datetime.strptime(latest_ts_str,timestamp_format)

ts_raw = []
while ts_obj <= latest_ts_obj:
    ts_raw.append(ts_obj)
    ts_obj += timedelta(hours=1)

dates_formatted = [d.strftime('%Y-%m-%dT%H:%M:%SZ') for d in ts_raw]
print(dates_formatted)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。