私は、REST呼び出しにPythonで時間形式を追加しようとしていますが、問題の種類が常にあるようです。時間フォーマット要件、およびそれは正確でなければならない、またはそれは残念ながら働かないだろう。奇妙な時間形式を維持し、Pythonで値を追加する
要求パラメータには、次のISO-8601に準拠した日付/時刻形式を使用します。
YYYY-MM-dd'T'HH:MM:ss.SSSXXX例えば
、2014年5月26日午後九時49分46秒PMには、次のいずれかのような形式を持つことができます:
をPDTにおいてL:2014-05-26T21:49:46.000から07:UTC 00
L:2014-05-26T21:49:46.000Z
コード説明
- YYYY 4桁の年
- MM 2桁の月(01 = 1月、など)
- DD(01〜31)月の二桁の日
- T日付/時刻の区切り
- HH時間の2桁(00〜23)(AM/PMが許可されていない)分の
- ミリメートル2桁(00〜59)
- のSS第二の2桁(00〜59)は、第2
- XXX ISO 8601タイムゾーンの
- SSS 3桁のミリ秒(Zまたは+ HH:MMまたは-hh:mm)で
したがって、私が前に試したことは次のとおりです:
def format_time(self, isnow):
currentdt = datetime.datetime.utcnow()
if not isnow:
currentdt += datetime.timedelta(0,3)
(dt, micro) = currentdt.strftime('%Y-%m-%dT%H:%M:%S.%f').split('.')
dt = "%s.%03dZ" % (dt, int(micro)/1000)
return dt
これはちょっと正しい形式で返されるかもしれませんが、まだタイムゾーンに問題があります。
私が達成しようとしているのは、これを実行すると、現在の時刻(アムステルダムタイムゾーン/ GMT/UTC + 1)が見つかって、この形式で作成されます。 そして、else文は、同じ時刻を取得しますが、X秒を追加します。
ここで私を助けてくれる人は誰ですか?
あなたの問題を解決することはできませんが、あなたのコードを簡単に保守することができます(問題は簡単に答えられます): 'currentdt = datetime.datetime.utcnow()' 'if not:currentdt + = datetime。 timedelta(0,3) ''(dt、etc ... 'つまり、ifブロック内の唯一のものは、timedeltaを追加するだけで、時間をフォーマットする時間を分けます。あなたが望むならあなたの質問にあなたのために(通常、編集者はコードブロックを変更しないので、彼らは質問を変えています。)私はそこにいる間に不要な下品を編集します。 –
@ 私はあなたの他のポイントを理解していれば、私が現在試みているものをもっと簡略化したフォーマットに変更して、誰かが私に答えを提示できるかどうかを見てみたいですか? – Marius
これは推奨事項であり、要件ではありません。よりシンプルな形式を使用すると、1行のコードを修正するだけで済みます。それはあなたが投稿した10行のうち、3行は他の3行のコピーです。そして、問題は3行にあるので、そのように対処するのはよりクリーンです。私は変更を加えるつもりです。なぜなら、コメントよりも質問に入れるほうが簡単だからです。気に入らない場合は、「編集したX分前」をクリックしてロールバックしてください。 –