如何将明天(在特定时间)日期转换为时间戳

How to convert tomorrows (at specific time) date to a timestamp

我怎样才能真正为下一个 6 点创建时间戳,无论是今天还是明天?

我尝试使用 datetime.datetime.today() 并将日期替换为 +1 和小时 = 6,但我无法将其转换为时间戳。

需要你的帮助

要生成明天早上 6 点的时间戳,您可以使用如下内容。这将创建一个表示当前时间的 datetime 对象,检查当前小时是否小于 6 点,为下一个 6 点创建一个 datetime 对象(包括在必要时添加递增日期),最后转换将日期时间对象转换为时间戳

from datetime import datetime, timedelta
import time

# Get today's datetime
dtnow = datetime.now()

# Create datetime variable for 6 AM
dt6 = None

# If today's hour is < 6 AM
if dtnow.hour < 6:

    # Create date object for today's year, month, day at 6 AM
    dt6 = datetime(dtnow.year, dtnow.month, dtnow.day, 6, 0, 0, 0)

# If today is past 6 AM, increment date by 1 day
else:

    # Get 1 day duration to add
    day = timedelta(days=1)

    # Generate tomorrow's datetime
    tomorrow = dtnow + day

    # Create new datetime object using tomorrow's year, month, day at 6 AM
    dt6 = datetime(tomorrow.year, tomorrow.month, tomorrow.day, 6, 0, 0, 0)

# Create timestamp from datetime object
timestamp = time.mktime(dt6.timetuple())

print(timestamp)

要在正确处理遵守夏令时 (DST) 的时区的同时获取下一个 6 点:

from datetime import datetime, time, timedelta
import pytz # $ pip install pytz
from tzlocal import get_localzone # $ pip install tzlocal

DAY = timedelta(1)
local_timezone = get_localzone()
now = datetime.now(local_timezone)
naive_dt6 = datetime.combine(now, time(6))
while True:
    try:
        dt6 = local_timezone.localize(naive_dt6, is_dst=None)
    except pytz.NonExistentTimeError: # no such time today
        pass
    except pytz.AmbiguousTimeError: # DST transition (or similar)
        dst = local_timezone.localize(naive_dt6, is_dst=True)
        std = local_timezone.localize(naive_dt6, is_dst=False)
        if now < min(dst, std):
            dt6 = min(dst, std)
            break
        elif now < max(dst, std):
            dt6 = max(dst, std)
            break
    else:
        if now < dt6:
            break
    naive_dt6 += DAY

一旦你有了一个代表本地时区下一个 6 点钟的感知日期时间对象,就很容易获得时间戳:

timestamp = dt6.timestamp() # in Python 3.3+

或旧 Python 版本:

timestamp = (dt6 - datetime(1970, 1, 1, tzinfo=pytz.utc)).total_seconds()

参见 Converting datetime.date to UTC timestamp in Python

该解决方案有效即使任何发生以下情况:

  • python(例如,)无法访问给定系统上的历史时区数据库(特别是:Windows)—pytz 提供可移植访问到 tz 数据库
  • 现在和下一个 X 小时之间有 DST 转换(在您的情况下 X 是早上 6 点),或者如果本地时区的 UTC 偏移量因任何其他原因发生了变化—— 找到正确的秒数,但时区感知日期时间对象可以找到正确的时差
  • 标称的下一个 X 小时(今天或明天)在当地时区不存在或不明确(通常发生在 DST 转换期间——每年在许多时区)。 。在这种情况下,应用程序应明确处理 NonExistentTimeErrorAmbiguousTimeError 异常
  • 当前时间是在本地时区第一次出现不明确的 X 小时之后,但在第二次出现 X 小时之前 —。上面 AmbiguousTimeError 子句中的 min/max 代码可以正确处理它。