- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:
我有这个特定时间的列表,例如:
repeat = ['8:15','14:28','19:43','1:21']
现在我正在尝试创建一个函数,该函数将输出 n 个日期时间对象的列表,如下所示:
>>> import datetime
>>>
>>> datetime.datetime.now()
datetime.datetime(2018, 10, 30, 17, 5, 55, 908000) # 2018-10-30 17:05:55
>>>
>>> output = magic(repeat, how_many=3) # <---
>>> output
[datetime.datetime(2018, 10, 30, 19, 43), datetime.datetime(2018, 10, 31, 1, 21), datetime.datetime(2018, 10, 31, 8, 15)]
>>>
>>>
>>> for i in output:
>>> print( i.strftime("%Y-%m-%d %H:%M:%S") )
2018-10-30 19:43:00
2018-10-31 01:21:00
2018-10-31 08:15:00
我的进展:
所以我用这个解决方案解决了这个问题:
def next(datetime_object, repeat):
# this function should calculate the next datetime from the datetime_object
return next_datetime_object
def magic(repeat, how_many=10):
converted = []
for i in repeat:
converted.append( datetime.datetime.strptime(i, '%H:%M') )
now = datetime.datetime.now()
output = [ next(now,converted) ]
while len(output) < how_many:
output.append(
next(output[-1] ,converted)
)
return output
尽管我在创建这个函数 next()
时陷入困境,它应该计算下一个日期时间对象。
此外,如果有人有比我更好的其他替代解决方案,请与我分享。
<小时/>编辑 1(仅用于澄清)
输入:repeat = ['8:15','14:28','19:43','1:21']
函数:magic(repeat, how_many=3)
输出:[ datetime.datetime(2018, 10, 30, 19, 43), datetime.datetime(2018, 10, 31, 1, 21), datetime.datetime(2018, 10, 31, 8) , 15) ]
注意:输出取决于当前的datetime.datetime.now()
。在上面的示例中,当前时间为 datetime.datetime(2018, 10, 30, 17, 5, 55, 908000)
最佳答案
您想要创建 datetime.time()
对象,然后使用 itertools.cycle()
使序列循环和 combine这些与 datetime.date
objects :
import datetime
from itertools import cycle, product, repeat
from bisect import bisect
def datetime_series(*timestrings, reference=None):
times = sorted(datetime.time(*map(int, t.split(':'))) for t in timestrings)
if reference is None:
reference = datetime.datetime.now()
date, tnow = reference.date(), reference.time()
next_pos = bisect(times, tnow) # index of next time object to use
times = cycle(times + [None])
for _ in range(next_pos): # skip forward across the time objects
next(times)
for time in times:
if time is None:
# next day
date += datetime.timedelta(days=1)
time = next(times)
yield datetime.datetime.combine(date, time)
上面使用None
作为哨兵来检测日期值是否需要递增一步,并且时间字符串被接受为单独的参数,并且您可以传入不同的引用日期(默认是使用现在)。
它也是一个无限的生成器,因此您可以逐步迭代它,或使用 itertools.slice()
来限制结果的数量。
就我个人而言,我会更改让函数接受 datetime.time()
对象,而不是传入字符串,这样您只需对参数进行排序,而无需解析并从那里开始。
演示:
>>> from itertools import islice
>>> from pprint import pprint
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2018, 10, 30, 17, 39, 46, 91967)
>>> m = datetime_series('8:15', '14:28', '19:43', '1:21')
>>> next(m)
datetime.datetime(2018, 10, 30, 19, 43)
>>> next(m)
datetime.datetime(2018, 10, 31, 1, 21)
>>> m = datetime_series('8:15', '14:28', '19:43', '1:21')
>>> ten_results = list(islice(m, 10))
>>> pprint(ten_results)
[datetime.datetime(2018, 10, 30, 19, 43),
datetime.datetime(2018, 10, 31, 1, 21),
datetime.datetime(2018, 10, 31, 8, 15),
datetime.datetime(2018, 10, 31, 14, 28),
datetime.datetime(2018, 10, 31, 19, 43),
datetime.datetime(2018, 11, 1, 1, 21),
datetime.datetime(2018, 11, 1, 8, 15),
datetime.datetime(2018, 11, 1, 14, 28),
datetime.datetime(2018, 11, 1, 19, 43),
datetime.datetime(2018, 11, 2, 1, 21)]
>>> question_1 = datetime.datetime(2008, 7, 31, 21, 26, 37) # https://meta.stackexchange.com/a/30138
>>> question_1_series = datetime_series('8:15', '14:28', '19:43', '1:21', reference=question_1)
>>> pprint(list(islice(question_1_series, 10)))
[datetime.datetime(2008, 8, 1, 1, 21),
datetime.datetime(2008, 8, 1, 8, 15),
datetime.datetime(2008, 8, 1, 14, 28),
datetime.datetime(2008, 8, 1, 19, 43),
datetime.datetime(2008, 8, 2, 1, 21),
datetime.datetime(2008, 8, 2, 8, 15),
datetime.datetime(2008, 8, 2, 14, 28),
datetime.datetime(2008, 8, 2, 19, 43),
datetime.datetime(2008, 8, 3, 1, 21),
datetime.datetime(2008, 8, 3, 8, 15)]
关于python - 获取重复时间的日期时间对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068956/
您好,我是使用 xampp 的 PHPmyadmin 新手,没有 MYSQL 背景。当我喜欢研究它是如何工作的时,我的脑海中浮现出一个想法,它让我一周都无法休眠,因为我似乎无法弄清楚如何使用 MIN(
Go docs say (强调): Programs using times should typically store and pass them as values, not pointers.
我有一组用户在 8 月 1 日有一个条目。我想找到在 8 月 1 日有条目但在 8 月 2 日没有做任何事情的用户。 现在是 10 月,所以事件已经过去很久了。 我有限的知识说: SELECT * F
我有以下代码,主要编码和取消编码时间结构。这是代码 package main import ( "fmt" "time" "encoding/json" ) type chec
您能详细解释一下“用户 CPU 时间”和“系统 CPU 时间”吗?我读了很多,但我不太理解。 最佳答案 区别在于时间花在用户空间还是内核空间。用户 CPU 时间是处理器运行程序代码(或库中的代码)所花
应用程序不计算东西,但做输入/输出、读取文件、使用网络。我希望探查器显示它。 我希望像 callgrind 中的东西一样,在每个问题中调用 clock_gettime。 或者像 oprofile 那样
目前我的 web 应用程序接收 websocket 数据来触发操作。 这会在页面重新加载时中断,因此我需要一个能够触发特定事件的客户端解决方案。 这个想法可行吗? 假设你有 TimeX = curre
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个 Instant (org.joda.time.Instant) 的实例,我在一些 api 响应中得到它。我有另一个来自 (java.time.Instant) 的实例,这是我从其他调用中获得
如何集成功能 f(y) w.r.t 时间;即 'y'是一个包含 3000 个值和值 time(t) 的数组从 1 到 3000 不等。所以,在整合 f(y) 后我需要 3000 个值. 积分将是不确定
可以通过 CLI 创建命名空间,但是如何使用 Java SDK 来创建命名空间? 最佳答案 它以编程方式通过 gRPC API 完成由服务公开。 在 Java 中,生成的 gRPC 客户端可以通过 W
我有一个函数,它接受 2 组日期(开始日期和结束日期),这些日期将用于我的匹配引擎 我必须知道start_date1和end_date1是否在start_date2和end_date2内 快进:当我在
我想从 Python 脚本运行“time”unix 命令,以计算非 Python 应用程序的执行时间。我会使用 os.system 方法。有什么方法可以在Python中保存这个输出吗?我的目标是多次运
我正在寻找一种“漂亮的数字”算法来确定日期/时间值轴上的标签。我熟悉 Paul Heckbert's Nice Numbers algorithm . 我有一个在 X 轴上显示时间/日期的图,用户可以
在 PowerShell 中,您可以格式化日期以返回当前小时,如下所示: Get-Date -UFormat %H 您可以像这样在 UTC 中获取日期字符串: $dateNow = Get-Date
我正在尝试使用 Javascript 向父子窗口添加一些页面加载检查功能。 我的目标是“从父窗口”检测,每次子窗口完全加载然后执行一些代码。 我在父窗口中使用以下代码示例: childPage=wi
我正在尝试设置此 FFmpeg 命令的 drawtext 何时开始,我尝试使用 start_number 但看起来它不会成功。 ffmpeg -i 1.mp4 -acodec aac -keyint_
我收到了一个 Excel (2010) 电子表格,它基本上是一个文本转储。 单元格 - J8 具有以下信息 2014 年 2 月 4 日星期二 00:08:06 EST 单元格 - L8 具有以下信息
我收到的原始数据包含一列具有以下日期和时间戳格式的数据: 2014 年 3 月 31 日凌晨 3:38 单元格的格式并不一致,因为有些单元格有单个空格,而另一些单元格中有两个或三个字符之间的空格。所以
我想知道是否有办法在我的 Grails 应用程序顶部显示版本和构建日期。 编辑:我应该说我正在寻找构建应用程序的日期/时间。 最佳答案 在您的主模板中,或任何地方。 Server version:
我是一名优秀的程序员,十分优秀!