2017-01-26 6 views
3

はここに私のコードです:Pythonのdatetime型の変換

from datetime import datetime 

def get_local_time(time_str): 
    """ 
    takes a string in the format of '27 March at 3:00' which is UTC 
    and converts it to local time and AM/PM 
    :param time_str: 
    """ 
    offset = datetime.now() - datetime.utcnow() 
    time_dt = datetime.strptime(time_str, '%d %b at %H:%M') 
    return (time_dt + offset).strftime('%I:%M %p') 

私が唯一の時間だと日/月含まれていませんtime_strを使用しているとの問題を抱えています。すなわち: "2:00"

を、私はそれを変更する場合:time_dt = datetime.strptime(time_str、 '%のH:%のM')その後、私は1900年

前のstrftimeと年についてエラーが出ます私はここで困っている。入力文字列でちょうど時間を許すためには何が必要ですか?

答えて

2

dateutilパッケージで試すことができます。 parser.parse()メソッドは、入力文字列が変更されたときに有効です。文字列に時間だけが指定されている場合は、今日の日付を持つdatetimeオブジェクトを作成します。それは様々な他のフォーマットを扱うでしょう。

from datetime import datetime 
from dateutil import parser 

def get_local_time(time_str): 
    """ 
    takes a string in the format of '27 March at 3:00' which is UTC 
    and converts it to local time and AM/PM 
    :param time_str: 
    """ 
    offset = datetime.now() - datetime.utcnow() 
    time_dt = parser.parse(time_str) 
    return (time_dt + offset).strftime('%I:%M %p') 

あなたは、あなたがこのような何かができる唯一の日時パッケージに制限されている場合:

from datetime import datetime 

def get_local_time(time_str): 
    """ 
    takes a string in the format of '27 March at 3:00' which is UTC 
    and converts it to local time and AM/PM 
    :param time_str: 
    """ 
    if len(time_str) <= 5: 
     time_str = datetime.now().strftime('%d %B at ') + time_str 
    offset = datetime.now() - datetime.utcnow() 
    time_dt = datetime.strptime(time_str, '%d %B at %H:%M') 
    return (time_dt + offset).strftime('%I:%M %p') 

print get_local_time('27 March at 3:00') 
print get_local_time('3:00') 

それとも、そうのようにそれを行うことができます。

from datetime import datetime 

def get_local_time(time_str): 
    """ 
    takes a string in the format of '27 March at 3:00' which is UTC 
    and converts it to local time and AM/PM 
    :param time_str: 
    """ 
    offset = datetime.now() - datetime.utcnow() 
    if len(time_str) <= 5: 
     time_dt = datetime.combine(datetime.now().date(), datetime.strptime(time_str, '%H:%M').time()) 
    else: 
     time_dt = datetime.strptime(time_str, '%d %B at %H:%M') 
    return (time_dt + offset).strftime('%I:%M %p') 

print get_local_time('27 March at 3:00') 
print get_local_time('3:00') 
+0

これはうまくいくと思います。しかし、私は別のアプリ(Kodi)と一緒にこれを使用しています。そしてdateutilはライブラリに含まれていないようですので、動作しません。誰かが他に何かを持っていない限り、答えとしてマークしています。 – Bahnzo

+1

@Bahnzo \tあなたがdateutilパッケージを望んでいない場合は、改善します。私には時間があります。 – MYGz

+0

@Bahnzo \t私はそれが今あなたのために働くことを願っています。 – MYGz

2

を私はreplでそれを試しました。それは私のために働いていた:私は、右覚えていれば

>>> from datetime import datetime 
>>> time = "02:00" 
>>> time_dt = datetime.strptime(time, '%H:%M') 
>>> time_dt 
datetime.datetime(1900, 1, 1, 2, 0) 
>>> 

、日時はだけ時間を保存することはできません、あなたはせずに、時間を保存したい場合は、常に1月1日、1900年のダミー日があるでしょうダミー日付、timeクラスを使用してみてください。また、strftime関数もあります。https://docs.python.org/2/library/time.html

datetimeが機能していない場合は、別のダミーの日付を追加することもできます。

+0

間違いなく間違いがあります。これはPython 2.7を使用する "Kodi"というアプリケーションで使用されています。だから私はそれがどのように干渉しているのか分からない。しかし、あなたも正しいです、私はダミーの日と月を追加することができ、それは正常に動作します。ちょうど私がするべきではないようです。 – Bahnzo

関連する問題