2017-09-28 20 views
1

當我嘗試做以下如何使用日期時間可以是「24」的小時字符串?

datetime.datetime.strptime("2824", "%d%H") 

我收到以下錯誤:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime 
    tt, fraction = _strptime(data_string, format) 
    File "/usr/lib/python3.5/_strptime.py", line 346, in _strptime 
    data_string[found.end():]) 
ValueError: unconverted data remains: 4 

據我所看到的,這是因爲使用「24」作爲一個小時,而不是「的00" 。最終,我的代碼是這樣的:

tmp = datetime.datetime.strptime(timestamp, "%d%H") 

now = datetime.datetime.utcnow() 

start_datetime = datetime.datetime(
        now.year, 
        now.month, 
        tmp.day, 
        tmp.hour, 
        tmp.minute 
       ) 

這裏,變量timestamp的形式DDHH,其中DD是日期,HH是小時,HH可以採取值「24」的字符串。我應該如何解決這個不平凡的問題?

+0

這種日期來自哪裏? –

+1

24是否意味着_same_爲00(即給定日期的開始),還是意味着第二天的_00_? (如日本IIRC的傳統)。 – MatsLindh

+0

@BillBell這出現在TAF(終端機場預測)字符串中,例如:TAF EGPF 281657Z 2818/2918 15008KT 9999 FEW035 PROB40 TEMPO 2818/2824 9000 RA TEMPO 2900/2908 7000 RA PROB40 TEMPO 2902/2908 BKN012 BECMG 2907/2910 23012KT PROB30 TEMPO 2912/2918 8000 SHRA'。 TAF中的「2818/2824」這樣的字符串是預測有效的時間窗口,時間窗口的開始時間是29日18:00,時間窗口的末尾是28日24:00 。 – BlandCorporation

回答

1
from datetime import datetime, timedelta 

ONE_DAY = timedelta(days=1) 

def parse_time(s): 
    if s.endswith("24"): 
     s = s[:-2] + "00"  
     return datetime.strptime(s, "%d%H") + ONE_DAY 

tmp = parse_time("2824") 

now = datetime.utcnow() 

start_datetime = datetime(
        now.year, 
        now.month, 
        tmp.day, 
        tmp.hour, 
        tmp.minute 
       ) 
print(start_datetime) 

>>> 
2017-09-29 00:00:00 
>>> 
相關問題