【问题标题】:Get UNIX timestamp of this week's monday and the start of today in Python在 Python 中获取本周星期一和今天开始的 UNIX 时间戳
【发布时间】:2015-11-18 08:23:09
【问题描述】:

我正在尝试调查如何找到这些数字,但老实说,我在网上找到的答案一直让我感到困惑。我正在尝试弄清楚如何获取今天的开始时间和最近的星期一的时间。

我读到了 time.time(),但这给了我现在的时间。

【问题讨论】:

  • “今天的开始”到底是什么意思?它只是当地时间午夜,还是更复杂的?
  • 你的意思是 utime(从 1970 年开始的秒数)?
  • 请尽可能将您的问题限制为每个问题一个问题,例如,您可以将此问题分成几个独立的步骤:(1) 从今天开始 (2) 本周的星期一 (3) 转换本地时间到 Unix 时间,也就是说,您可以问 3 个问题(如果需要,可以提供额外的上下文和问题之间的链接)。
  • @J.F.Sebastian 这根本不是一个合理的问题划分。对于我需要的编程案例,这是一个综合性的问题。如果您想建议我详细说明我的要求,那将是我会遵守的。为了页面显示在谷歌中,没有必要混淆我作为用户所需要的内容。这不是 SO 的重点。
  • @LukeJamesEmery:90% 以上的访问者来自谷歌。这是SO的重点。你期待别人的帮助,同时积极地拒绝反过来帮助。对我来说很好。我已经回答了你的问题,不是吗。我之前的评论只是展示了你如何通过提出可能对其他人有用的问题来回馈社会。做与不做完全取决于你。

标签: python unix time timestamp


【解决方案1】:

我更喜欢使用datetime,然后您可以轻松地将其转换为时间戳:How to convert a Python datetime object to seconds

要获取今天的日期,并将当地时间设置为零(午夜):

today = datetime.datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)

如果您这样做,您可能需要在转换为时间戳之前将时区转换为 UTC。如果您希望在 UTC 时间选择午夜:

today_utc = datetime.datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)

现在要适应星期一,您需要知道这代表一周中的哪一天。方便地有一个 weekday 方法使用 0 表示星期一,所以你可以减去:

monday = today - datetime.timedelta(days=today.weekday())

【讨论】:

  • 将表示本地时间的天真日期时间对象转换为 Unix 时间戳并不容易::第一个答案不合适,第二个答案不可移植。阅读my commentsthe answer there
  • @J.F.Sebastian 我知道我对将本地时间转换为 UTC 的部分做了一些手脚,但是是什么让它不合适?我真希望 OP 能回来澄清这个问题。
  • "unsuitable" 是关于您提供的链接中的第一个答案,该链接使用仅适用于 UTC 时间的公式,甚至没有提及这一事实。
【解决方案2】:

这样的事情应该会为您提供当地时区今天午夜的 unix 时间戳:

today = datetime.date.today()
time.mktime((today.year, today.month, today.day, 0, 0, 0, 0, 0, 0))

这应该会让你在星期一午夜,因为星期一被认为是一周的第 0 天:

monday = today + datetime.timedelta(days=-today.weekday())
time.mktime((monday.year, monday.month, monday.day, 0, 0, 0, 0, 0, 0))

【讨论】:

  • 如果 mktime() 无法访问给定平台上的历史时区数据库,它可能会在过去的日期失败。便携式解决方案可以use a pytz-based solution
【解决方案3】:

在 Python 中获取今天开始的 UNIX 时间戳

请参阅How do I get the UTC time of “midnight” for a given timezone? 以获取表示午夜的感知日期时间对象。要从该对象获取 Unix 时间戳,请调用其 .timestamp() method.

获取本周星期一的 UNIX 时间戳

周一时间戳的代码几乎相同:

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

local_timezone = tzlocal.get_localzone()
today = datetime.now(local_timezone).date()
monday = today - timedelta(today.weekday())
dt = local_timezone.localize(datetime.combine(today, time.min), is_dst=None)
unix_time = dt.timestamp()

如果您需要 .timestamp() 实现,请参阅Converting datetime.date to UTC timestamp in Python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多