2017-06-25 3 views
1

私はイベントがこの形で来るでFacebookのグラフから開始時刻を引くと:Facebookグラフから取得した時間を12時間形式に解析するにはどうすればよいですか?

2017-09-26T18:00:00+0300 

私が読める形式に変換したいと思いますので、私はこれを使用します。

readable_event_date = dateutil.parser.parse(event_date).strftime('%a, %b %d %Y %H:%M:%S') 

をし、それが出てきます

Tue, 26 Sep 2017 18:00:00 

いいですが、それはUTCからのオフセットを失い、私はAM PM形式で欲しいと思います。

したがって、私はこのようにそれをしたいと思います:

Tue, 26 Sep 2017 9:00 PM 
+0

[この質問に対する回答](https:///stackoverflow.com/questions/13855111/how-can-i-convert-24-hour-time-to-12-hour-time)。 –

答えて

1

12時間形式に取得し、印刷のためにUTCからのオフセット保つために:

from dateutil.parser import parse 

event_date = '2017-09-26T18:00:0+0300' 

date = parse(event_date) 
offset = date.tzinfo._offset 

readable_event_date = (date + offset).strftime('%a, %b %d %Y %I:%M:%S %p') 

print(readable_event_date) 

出力:

'Tue, Sep 26 2017 09:00:00 PM' 
+0

これはまったく正しい方法ではありません。 '_offset'を使わないでください。手動でオフセットを日付に追加しないでください。 '.astimezone(dateutil.tz。tzutc()) 'を使用します。オフセットを表示する場合は%zを使用します。 – Paul

+0

また、日付を2回解析する必要はありません。 – Paul

+0

ここで、あなたはtimezone 'date.astimezone(dateutil.tz.tzutc())' - > 'datetime.datetime(2017,9,26,15、0、tzinfo = tzutc())'を知りません。あなたはオフセットだけを知っています。もう一度正しいと思ったら、答えを正確にしてください。 – glegoux

1

この時間は、UTCで表現された'%a, %b %d %Y %I:%M:%S %p'という形式で、あなたが望むように思えます。幸いにも、あなたがこれを行うために必要なすべての情報はあなたが解析されdatetimeオブジェクトに含まれている、あなただけのPython 2.6+やPython 3.3+

UTC

に変換する必要があります。

あなたがきたアプローチ。+ Pythonの2.6+やPython 3.3で動作しますdateutilを使用して撮影した(とも日時文字列のフォーマットの大きいさまざまな作品):私は気付か

from dateutil.parser import parse 

# In Python 2.7, you need to use another one 
from dateutil.tz import tzutc 
UTC = tzutc() 

dt_str = '2017-09-26T18:00:00+0300' 
dt = parse(dt_str) 
dt_utc = dt.astimezone(UTC) # Convert to UTC 

print(dt_utc.strftime('%a, %b %d %Y %I:%M:%S %p')) 
# Tue, Sep 26 2017 03:00:00 PM 

一つのことは、日付あなたが提供したこと限りであります私が言うことができるように、9PMではなく、UTCの3PMを表します(あなたの例として)。これは、他の方法ではなく.astimezone(UTC)を使用する理由の1つです。

タイムゾーンのオフセット情報を含める場合は、datetimeオブジェクトの変換されていないバージョンで%zパラメータを使用することもできます。あなたはUTCでそれを維持している場合でも、あなたは、少なくとも、ユーザーが見ている日付は、UTCの日付であることは明らかでできるので

print(dt.strftime('%a, %b %d %Y %I:%M:%S%z %p')) 
# Tue, Sep 26 2017 06:00:00+0300 PM 

この%zパラメータも、有用である可能性があります。

のPython 3.2以上のみ:

あなたが入力文字列の正確な形式を知っていることを考えると、Pythonの3.2以上では、あなたがdateutilに引っ張らず、この同じことを達成することができ、そしてそれはほぼ確実に速くなりますあなたの場合は、標準のライブラリだけで動作するようにコードを書き換える方法があります:

from datetime import datetime, timezone 
UTC = timezone.utc 

dt_str = '2017-09-26T18:00:00+0300' 
dt = datetime.strptime(dt_str, '%Y-%m-%dT%H:%M:%S%z') 
dt_utc = dt.astimezone(UTC) 

print(dt_utc.strftime('%a, %b %d %Y %I:%M:%S %p')) 
# Tue, Sep 26 2017 03:00:00 PM 

print(dt.strftime('%a, %b %d %Y %I:%M:%S%z %p')) 
# Tue, Sep 26 2017 06:00:00+0300 PM 
関連する問題