当前位置: 首页 > 面试题库 >

将日期时间推迟到下一刻钟

方茂
2023-03-14
问题内容

让我们想象一下 datetime

>>> import datetime
>>> dt = datetime.datetime(2012, 10, 25, 17, 32, 16)

我想将其推迟到下一个季度,以获取

datetime.datetime(2012, 10, 25, 17, 45)

我想像

>>> quarter = datetime.timedelta(minutes=15)
>>> import math
>>> ceiled_dt = math.ceil(dt / quarter) * quarter

但是,当然,这不起作用


问题答案:

这需要微秒!

import math

def ceil_dt(dt):
    # how many secs have passed this hour
    nsecs = dt.minute*60 + dt.second + dt.microsecond*1e-6  
    # number of seconds to next quarter hour mark
    # Non-analytic (brute force is fun) way:  
    #   delta = next(x for x in xrange(0,3601,900) if x>=nsecs) - nsecs
    # analytic way:
    delta = math.ceil(nsecs / 900) * 900 - nsecs
    #time + number of seconds to quarter hour mark.
    return dt + datetime.timedelta(seconds=delta)

t1 = datetime.datetime(2017, 3, 6, 7, 0)
assert ceil_dt(t1) == t1

t2 = datetime.datetime(2017, 3, 6, 7, 1)
assert ceil_dt(t2) == datetime.datetime(2017, 3, 6, 7, 15)

t3 = datetime.datetime(2017, 3, 6, 7, 15)
assert ceil_dt(t3) == t3

t4 = datetime.datetime(2017, 3, 6, 7, 16)
assert ceil_dt(t4) == datetime.datetime(2017, 3, 6, 7, 30)

t5 = datetime.datetime(2017, 3, 6, 7, 30)
assert ceil_dt(t5) == t5

t6 = datetime.datetime(2017, 3, 6, 7, 31)
assert ceil_dt(t6) == datetime.datetime(2017, 3, 6, 7, 45)

t7 = datetime.datetime(2017, 3, 6, 7, 45)
assert ceil_dt(t7) == t7

t8 = datetime.datetime(2017, 3, 6, 7, 46)
assert ceil_dt(t8) == datetime.datetime(2017, 3, 6, 8, 0)

说明delta

  • 900秒是15分钟(四分之一小时 不包含leap秒,我认为日期时间无法处理…
  • nsecs / 900是已发生的四分之一小时块的数量。ceil以此取整四分之一小时的块数。
  • 将四分之一小时的块数乘以900,以计算自“四舍五入”后的小时开始以来已经发生了多少秒。


 类似资料:
  • 问题内容: 我有一个日期时间格式的字段,当日期更好并且与数据库的其余部分更一致时,我想进行转换。无论如何,时间部分都是00:00:00。 如何在MySQL中做到这一点? 谢谢。 问题答案: 如果要在-Statement中使用,请使用运算符: 如果要在结构上更改表,只需将数据类型更改为(当然,只有在不影响依赖于此字段的应用程序的情况下,才这样做)。 两者都将消除时间部分。

  • 我有个约会‘2019-05-08t 22:15:00-0400’。我想将这个日期与当前的日期和时间进行比较。如果上述日期和时间小于当前日期和时间,那么我必须做些什么。 我的代码是:- 但它返回 false 。

  • 问题内容: 有谁知道如何将JS dateTime转换为MySQL datetime?还有一种方法可以向JS日期时间添加特定的分钟数,然后将其传递给MySQL日期时间? 问题答案: 尽管JS确实拥有足够的基本工具来执行此操作,但它相当笨拙。

  • 问题内容: 将记录插入数据库时​​,我无法将C#日期时间 7/31/2017 3:13:49 PM转换 为SQL日期时间。 我正在使用 但这给了我错误。 无法将字符串识别为有效的DateTime。 问题答案: .Net 直接映射到SQL Server 。这意味着您完全不需要担心显示格式,因为它没有显示格式。 您需要做的就是将struct的实例 作为参数 传递给:

  • 问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样

  • 我使用React和JSX返回一个输入字段类型"datetime本地"。我希望最小值是我们今天的日期和当前时间。但是我不知道怎么写。 我尝试的是: 当我选择日期时间时,它不起作用,也没有设置最小值。