2011-07-15 23 views
2

「2011-11-06 14:00:00 + 00:00」のような日付文字列があります。これがUTC形式であるかどうかをチェックする方法はありますか?私は上記の文字列をutc = datetime.strptime('2011-11-06 14:00:00+00:00','%Y-%m-%d %H:%M%S+%z)を使ってdatetimeオブジェクトに変換しようとしましたが、pytz.utcと比較することができますが、 'ValueError:' z 'はフォーマット'%Y-%m-%d%H :%M%S +%z '日付文字列がUTC形式であるかどうかを調べる

日付文字列がUTCであるかどうかをチェックする方法?いくつかの例は本当に感謝しています。

は単純な正規表現がどうなる

+0

@ S.Lott、小文字の「%z」はPython 3でも有効とは思われません。そうであれば、[docs](http://docs.python.org/py3k/ library/time.html#time.strftime)が間違っています。 – senderle

+0

@sendle:http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior。 '%z'はstrftimeのためのものだと言っていますか?もしそうなら、答えとして投稿するべきだと思います。 –

+1

aside:与えられた文字列は実際には有効ではありません*有効なiso-8601 datetimeですが、むしろ* 2つの有効な値(1つは日付、もう1つは時刻)です。この標準では、 'T 'で結合された日付/時刻の値とそれ以外の値だけの間にはかなり明るい線が引かれます。 – SingleNegationElimination

答えて

4

ありがとう:

>>> import re 
>>> RE = re.compile(r'^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$') 
>>> bool(RE.search('2011-11-06 14:00:00+00:00')) 
True 
2

あなたのフォーマット文字列に問題がstrptimeがちょうどCのstrptimeまでに時間文字列を解析する仕事を渡し、別の味ということですc異なるディレクティブを受け入れます。あなたの場合(そして私のように)、%zの指示は受け入れられません。

これについては、ドキュメントページに多少の曖昧さがあります。 datetime.datetime.strptimeドキュメントは小文字%z指令を含み、

Additional directives may be supported on certain platforms, but only the ones listed here have a meaning standardized by ANSI C.

ことを示すないtime.strptimeのフォーマット仕様を指す。しかし、それはまた、小文字%zを含有し、それを反復しhereポイント

The full set of format codes supported varies across platforms, because Python calls the platform C library’s strftime() function, and platform variations are common.

この問題については、bug reportもあります。

関連する問題