【问题标题】:Python3 Get epoch time first and last day of monthPython3获取本月第一天和最后一天的纪元时间
【发布时间】:2022-11-25 15:46:12
【问题描述】:

给定月份和年份,例如03 2022,我需要获取该月的第一天和该月的最后一天的纪元时间。我不知道该怎么做。任何帮助,将不胜感激。谢谢你。

【问题讨论】:

    标签: python-3.x date datetime timestamp timedelta


    【解决方案1】:
    • 您可以通过将日期设置为 1 轻松获得月初。
    • 为了方便得到月末,可以计算月的第一天下一个一个月,然后有一天回去。
    • 然后将时区 (tzinfo) 设置为 UTC,以防止 Python 使用本地时间。
    • 终于打给了.timestamp()
    import datetime
    
    def date_to_endofmonth(
        dt: datetime.datetime, offset: datetime.timedelta = datetime.timedelta(days=1)
    ) -> datetime.datetime:
        """
        Roll a datetime to the end of the month.
    
        Parameters
        ----------
        dt : datetime.datetime
            datetime object to use.
        offset : datetime.timedelta, optional.
            Offset to the next month. The default is 1 day; datetime.timedelta(days=1).
    
        Returns
        -------
        datetime.datetime
            End of month datetime.
        """
        # reset day to first day of month, add one month and subtract offset duration
        return (
            datetime.datetime(
                dt.year + ((dt.month + 1) // 12), ((dt.month + 1) % 12) or 12, 1
            )
            - offset
        )
    
    
    year, month = 2022, 11
    
    # make datetime objects; make sure to set UTC
    dt_month_begin = datetime.datetime(year, month, 1, tzinfo=datetime.timezone.utc)
    dt_month_end = date_to_endofmonth(dt_month_begin).replace(tzinfo=datetime.timezone.utc)
    
    ts_month_begin = dt_month_begin.timestamp()
    ts_month_end = dt_month_end.timestamp()
    
    print(ts_month_begin, ts_month_end)
    # 1667260800.0 1701302400.0
    

    【讨论】:

    • @segaps:感谢您对此进行深入研究。我已经更新了代码。请注意,我无法重现 month = 11 的错误。另外,我认为将下个月开始的偏移量作为关键字放置会更好。
    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 2017-01-09
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2013-11-25
    • 2011-11-24
    相关资源
    最近更新 更多