结束一天(日期时间)的最优雅的方式是什么?

2024-05-02

我目前正在编写一些报告代码,允许用户选择指定日期范围。它的工作方式(简化)是:

  • 用户(可选)指定年份。
  • 用户(可选)指定月份。
  • 用户(可选)指定一天。

这是一个代码片段,以及描述我想要的内容的注释like to do:

from datetime import datetime, timedelta

# ...

now = datetime.now()
start_time = now.replace(hour=0, minute=0, second=0, microsecond=0)
stop_time = now
# If the user enters no year, month, or day--then we'll simply run a
# report that only spans the current day (from the start of today to now).

if options['year']:
    start_time = start_time.replace(year=options['year'], month=0, day=0)
    stop_time = stop_time.replace(year=options['year'])
    # If the user specifies a year value, we should set stop_time to the last
    # day / minute / hour / second / microsecond of the year, that way we'll
    # only generate reports from the start of the specified year, to the end
    # of the specified year.

if options['month']:
    start_time = start_time.replace(month=options['month'], day=0)
    stop_time = stop_time.replace(month=options['month'])
    # If the user specifies a month value, then set stop_time to the last
    # day / minute / hour / second / microsecond of the specified month, that
    # way we'll only generate reports for the specified month.

if options['day']:
    start_time = start_time.replace(day=options['day'])
    stop_time = stop_time.replace(day=options['day'])
    # If the user specifies a day value, then set stop_time to the last moment of
    # the current day, so that reports ONLY run on the current day.

我正在尝试找到最优雅的方式来编写上面的代码——我一直在尝试找到一种使用 timedelta 来完成此操作的方法,但似乎无法弄清楚。任何意见,将不胜感激。


要设置stop_time, 进步start_time视情况而定的一年、一月或一天,然后减去一timedelta(microseconds=1)

if options['year']:
    start_time = start_time.replace(year=options['year'], month=1, day=1)
    stop_time = stop_time.replace(year=options['year']+1)-timedelta(microseconds=1)

elif options['month']:
    start_time = start_time.replace(month=options['month'], day=1)
    months=options['month']%12+1
    stop_time = stop_time.replace(month=months,day=1)-timedelta(microseconds=1)

else:
    start_time = start_time.replace(day=options['day'])
    stop_time = stop_time.replace(day=options['day'])+timedelta(days=1,microseconds=-1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结束一天(日期时间)的最优雅的方式是什么? 的相关文章

随机推荐

  • TinyMCE 选择文本并使用 javascript 激活链接对话

    我正在尝试编写一个自动化 使用黄瓜 水豚 硒 测试 它将在tinymce框中选择一些文本 单击链接按钮 然后打开链接选择页面 但链接按钮仅在选择某些文本时才变为活动状态 所以第一轮 tinyMCE activeEditor selectio
  • 什么是 TEXTIMAGE_ON [PRIMARY]?

    我在很多桌子上工作过 所有桌子上都有这个东西 CREATE TABLE Persons id int IDENTITY 1 1 NOT NULL modified on datetime NULL modified by varchar 2
  • 错误:这些包与需求文件中的哈希值不匹配。更新 Django 时

    我有 Django 2 2 7 现在我想安装 Django 3 0 2 我读到我需要运行命令pip install U Django更新它 但是当我尝试时它显示此错误消息 ERROR THESE PACKAGES DO NOT MATCH
  • FxCop 文件夹丢失

    问题是什么 我正在尝试安装 FxCop 10 要安装它 需要 Microsoft Windows SDK 7 1 我安装了SDK 现在 要安装 FxCop 我必须运行 FxCopSetup exe 它应该位于文件夹 ProgramFiles
  • Swift - 如何隐藏导航项中的后退按钮?

    现在我有两个视图控制器 我的问题是我不知道如何在转换到第二个视图控制器后隐藏后退按钮 我发现的大多数参考资料都是 Objective C 的 我如何用 Swift 编写它 Objective C 中隐藏后退按钮代码 self navigat
  • Xcode:仅发布适用于 iPhone 的应用程序更新? [复制]

    这个问题在这里已经有答案了 我过去曾为 iPhone 和 iPad 制作过应用程序 但最新的更新仅适用于 iPhone 我换了Target Device Family to iPhone Only并存档和验证 但我收到错误 This bun
  • C++ 多重继承关闭同名运算符

    是否可以从两个不同的抽象类继承仅返回类型不同的同名运算符 如果是这样 他们 实现运算符的语法是什么 使用 解析运算符的语法是什么 与任何其他虚函数相同 一般情况下的开销是多少 如果您可以向我提供参考或示例代码 将会有所帮助 thanks 1
  • Python Peeweeexecute_sql() 示例

    我使用 Peewee 模块作为我的项目的 ORM 我看了整个文档 没有明确的 有关如何处理 db execute sql 结果的示例 我跟踪代码 只能发现db execute sql 返回游标 有谁知道如何处理光标 例如迭代它并获取 返回复
  • 为什么要输入两次密码?

    在大多数网站的注册用户部分 他们要求您输入密码两次 这是为什么 为什么不只输入一次密码 为什么一定要 确认 呢 You know Username Password Confirm password Submit 这件事在我心里已经有一段时
  • 让垂直网格线出现在 matplotlib 的线图中

    我想在绘图上同时获得水平和垂直网格线 但默认情况下仅显示水平网格线 我正在使用一个pandas DataFrame从 python 中的 sql 查询生成 x 轴上带有日期的线图 我不知道为什么它们没有出现在日期上 我试图寻找这个问题的答案
  • SyntaxError:多个异常类型必须用括号括起来

    我是初学者 在使用 python 安装 pycaw 进行音频控制后遇到问题 在放置 pycaw 的基本初始化代码时 出现以下错误 Traceback most recent call last File c Users volumeCont
  • 免费 DTD 到 XSD 转换实用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 DTD 需要将其转换为 XSD XML 架构 文件 有免费的实用程序或简单的方法来完成此任务
  • 使用会员提供程序的用户和角色列表

    我正在尝试使用内置的会员资格提供程序生成一个视图来显示用户列表及其角色 我的模型和控制器正在获取用户和角色 但我无法在视图中显示它们 Model public class AdminViewModel public MembershipUs
  • ElasticSearch JavaAPI (SearchScroll)- search_context_missing_exception","re​​ason":"找不到 id 的搜索上下文

    我正在获取超过100k使用一个索引中的文档searchScroll并在所有字段中再添加一个字段100K文件 然后再次将这些文档插入到另一个新索引中 我正在使用SearchScrollapi 也在设置大小searchSourceBuilder
  • 在 R 中绘制非常大的数据集

    如何在 R 中绘制非常大的数据集 我想使用箱线图 小提琴图或类似的图 内存中无法容纳所有数据 我可以逐步读入并计算制作这些图所需的摘要吗 如果是这样怎么办 作为对我的评论的补充德米特里回答 https stackoverflow com q
  • 为什么我的 Linux 应用程序引入了错误的 .so 库?

    我正在构建一个使用 NetCDF C 库的应用程序 并且 NetCDF 正在引入 HDF 4 库 然而 它正在拉动wrongHDF 4 库 我的应用程序的链接方式如下 apps1 intel bin icpc gxx name apps1
  • 将resourceBundle与外部文件java一起使用

    我一直在阅读有关此问题的其他问题和答案 但我不明白资源边界是如何完全工作的 我认为这与 Joomla 使用多语言选项的方式类似 基本上 您有要阅读的不同语言的不同消息的文件 所以我在 src Lang 文件夹中创建了 System prop
  • 如何在Azure上运行nodejs、express js项目的启动命令?

    我在用Azure 开发运营对于我的应用程序 我不确定如何为该项目设置启动命令 如果我将它添加到创建的管道中的任务中 它会给出一个错误 也许是因为该过程永远不会结束 实际上 我可以运行 npm install 并创建工件 但我需要应用程序启动
  • 弹出到主屏幕

    在我的应用程序中 我一个接一个地喜欢一些屏幕 并且我需要随时弹出到主屏幕 有什么方法可以找出活动屏幕是否是第一个 或者 可能有什么功能可以弹出到根屏幕而不循环弹出到以前的屏幕 EDIT换句话说 我需要我的应用程序在单击黑莓 后退 按钮时转到
  • 结束一天(日期时间)的最优雅的方式是什么?

    我目前正在编写一些报告代码 允许用户选择指定日期范围 它的工作方式 简化 是 用户 可选 指定年份 用户 可选 指定月份 用户 可选 指定一天 这是一个代码片段 以及描述我想要的内容的注释like to do from datetime i