如何解决如何正确地在两个日期时间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 举报,一经查实,本站将立刻删除。