簡體   English   中英

在Python中,將一天中的特定時間與當前時間相比較

[英]In Python, compare a specific time on a day with the current time in epoch

我正在嘗試將當前時間(A)與當天的特定時間(B)進行比較。 隨后,基於比較的結果,我想返回特定時間(明天(C)或后天(D))的POSIX時間。

舉例說明:

假設當前時間(A)為12:00。 我想將其與今天的20:00(B)進行比較。

由於A <B,我想明天返回13:00,格式為POSIX時間。

另一個例子:

現在假設當前時間(A)為21:00。 我仍然想將其與今天的20:00(B)進行比較。

由於A> B,因此我想后天返回13:00,再次將其格式化為POSIX時間。

我一直在嘗試使用timedatetime time庫來完成這項工作,但是當使用time我很難找到B,而當使用datetime時間時,我找不到一種將C和D作為POSIX時間返回的方法。

我是否正確確定了我應該使用哪些庫?如果是,我缺少什么?

有兩個問題:

  • 根據相對於20:00的當前時間,查找是否需要“明天13:00” 后天 13:00”
  • 將結果(例如“明天13:00”)轉換為POSIX時間

第一個很簡單:

#!/usr/bin/env python
import datetime as DT

current_time = DT.datetime.now()
one_or_two = 1 if current_time.time() < DT.time(20, 0) else 2
target_date = current_time.date() + DT.timedelta(days=one_or_two)
target_time = DT.datetime.combine(target_date, DT.time(13, 0))

注意: 00:00 : 00:00被認為小於20:00 您可能想改用時間間隔,例如20:00-8:008:00-20:00 ,以查明當前時間是否在之間


第二個問題與如何在Python中將本地時間轉換為UTC基本上相同 在一般情況下,沒有確切的答案,例如,相同的本地時間可能會出現兩次,或者可能完全丟失-使用哪種答案取決於特定的應用程序。 請參閱我在python將本地時間將字符串轉換為UTC紀元時間戳的答案中的更多詳細信息。

為了獲得正確的結果,並考慮到現在和目標時間之間可能存在的DST轉換或本地UTC偏移量的其他變化(例如,“后天”):

import pytz    # $ pip install pytz
import tzlocal # $ pip install tzlocal

epoch = DT.datetime(1970,1,1, tzinfo=pytz.utc)
local_timezone = tzlocal.getlocalzone()
timezone_aware_dt = local_timezone.localize(target_time, is_dst=None)
posix_time = (timezone_aware_dt - epoch).total_seconds()

注意: is_dst=None用於斷言給定的本地時間是否存在並且是明確的,例如,本地時間13:00處沒有DST轉換。

如果time.mktime()可以訪問您平台上的歷史時區數據庫(或者您根本不在乎本地utc偏移量的變化),則可以僅使用stdlib查找“時代”時間:

import time

unix_time = time.mktime(target_time.timetuple())

您可以在“ 查找日期時間之間是否經過24小時-Python”中閱讀有關何時失敗以及如何解決該問題的更多詳細信息。

或者,在Python中將datetime.date轉換為UTC時間戳,可以找到比在Python中查找POSIX時間戳更多的信息。

import datetime

A = datetime.datetime.now()
# A = A.replace(hour=21, minute=5)  # This line simlulates "after 21:00"
B = A.replace(hour=20, minute=0, second=0, microsecond=0)  # 20:00 today

if A < B:
    print A.replace(hour=13, minute=0, second=0, microsecond=0) + datetime.timedelta(days=1)  # 13:00 tomorrow
else:
    print A.replace(hour=13, minute=0, second=0, microsecond=0) + datetime.timedelta(days=2)  # 13:00 the day after

在Python 3中,您可以返回

X.timestamp()

在Python 2中,您可以使用

def timestamp(dt):
    return (dt - datetime.datetime(1970, 1, 1)).total_seconds()

timestamp(X)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM