【问题标题】:How to convert tomorrows (at specific time) date to a timestamp如何将明天(在特定时间)日期转换为时间戳
【发布时间】:2015-08-29 14:56:13
【问题描述】:

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

我尝试了 datetime.datetime.today() 并用 +1 和 hour = 6 替换一天,但我无法将其转换为时间戳。

需要你的帮助

【问题讨论】:

标签: python date datetime timestamp python-2.5


【解决方案1】:

在处理正确遵守夏令时 (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

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

【讨论】:

  • 我很想听听我的回答没有帮助或错误的地方,值得一票否决。这样我可以改进我的答案!
【解决方案2】:

要为明天早上 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)

【讨论】:

  • 谢谢伙计,只有一个问题,因为我看到了明天.day - 例如,如果我在凌晨 03:00 启动函数 - 它会显示接下来 3 小时内的时间戳还是27 小时?
  • 上面的代码将在 27 小时内。如果您想要在 3 小时内获得一个,您可以添加一个 if 语句来使用今天的日期if dtnow.hour &lt; 6,例如if dtnow.hour &lt; 6:\n dt6 = datetime(dtnow.year, dtnow.month, dtnow.day, 6, 0, 0, 0)\nelse:。如果这就是您要查找的内容,我可以在上面添加 if 条件。
  • 正是丢失了.. 可能解释我的“问题”太不准确了
  • 我现在已将其添加到答案中。现在,它应该,它应该为接下来的 6 点创建一个时间戳,无论是今天还是明天。如果您认为问题更清楚,则值得编辑该问题。
  • time.mktime() 可能会失败,如果本地时区在不同日期(大部分时间)可能有不同的 UTC 偏移量。 Use pytz module that provides a portable access to the tz database instead
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 2019-04-03
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-25
  • 2022-01-08
相关资源
最近更新 更多