1

重複の可能性:
Pythonで日付を通常の形式で印刷する方法は?

次の日付をPythonのタイムゾーンを含めて自然言語に変換する方法を知りたいですか?

入力:

"'2012-09-27T02:00:00Z'"

期待される出力:

Wednesday, September 26 of 2012 Mountain Time

前もって感謝します!

注編集:これまでのところ、複雑な日時文字列をうまく処理できませんが、django humanizeを試しました。

解決:

すべての情報をありがとう。元の文字列を解析し、次のように pitz と strftime を使用することになりました。

    my_date = '2012-09-27T02:00:00Z'
    utc_date_object = datetime(int(my_date[0:4]), int(my_date[5:7]), int(my_date[8:10]),int(my_date[11:13]),int(my_date[14:16]),int(my_date[17:19]),0,pytz.utc)
    mt_date_object = utc_date_object.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Mountain'))
    natural_date = mt_date_object.strftime("%A, %B %d of %Y")

出力:

'Wednesday, September 26 of 2012'
4

4 に答える 4

3

Babel プロジェクトは、完全な機能を備えた日付と時刻のローカリゼーション ライブラリを提供します。

タイムゾーンを含む日時文字列を正しく解析するには、iso8601モジュールも必要です。

ロケールに基づいて日付と時刻をフォーマットします。

>>> from datetime import date, datetime, time
>>> from babel.dates import format_date, format_datetime, format_time
>>> d = date(2007, 4, 1)
>>> format_date(d, locale='en')
u'Apr 1, 2007'
>>> format_date(d, locale='de_DE')
u'01.04.2007'

または、フォーマットを詳細に指定できます。これには、タイムゾーンのフォーマットが含まれます。

パーサーとフォーマッターを組み合わせる:

>>> dt = iso8601.parse_date("2012-08-25T02:00:00Z")
>>> format_date(dt, "MMMM dd, yyyy", locale='en') + ' at ' + format_time(dt, "HH:mm V")
u'August 25, 2012 at 02:00 World (GMT) Time'

序数 ('1st'、'2nd' など) は国際的に行うのが少し難しく、 Babel で使用されるLDML 形式にはこれらのパターンが含まれていません。

日付の書式設定に序数が必要な場合(おそらく、英語でのみ出力することを期待しているため)、それらを自分で作成する必要があります。

>>> suffix = ('st' if dt.day in [1,21,31]
...                else 'nd' if dt.day in [2, 22] 
...                else 'rd' if dt.day in [3, 23]
...                else 'th')
>>> u'{date}{suffix}, {year} at {time}'.format(
...     date=format_date(dt, "MMMM dd", locale='en'),
...     suffix=suffix, year=dt.year,
...     time=format_time(dt, "HH:mm V"))
u'August 25th, 2012 at 02:00 World (GMT) Time'
于 2012-09-25T18:32:54.960 に答える
1

strftime()メソッドを使用して、日付のカスタム文字列表現を取得できます。strftime は、日付をどのようにフォーマットするかを説明する文字列パターンを受け入れます。

例えば:

print today.strftime('We are the %d, %h %Y')
'We are the 22, Nov 2008'

「%」の後のすべての文字は、何かの形式を表します。

  • %d は日番号です
  • %m は月数です
  • %y は西暦の下 2 桁
  • %Y はすべての年です

https://stackoverflow.com/a/311655

于 2012-09-25T18:19:27.000 に答える
0
def myFormat(dtime):
    if dtime.day in [1,21,31] : ending = "st"
    elif dtime.day in [2,22] : ending = "nd" 
    elif dtime.day in [3,23] : ending = "rd" 
    else : ending = "th"

    return dtime.strftime("%B %d"+ ending + " of %Y")   
于 2012-09-25T18:27:28.783 に答える
0

あなたの質問に対する 100% の答えではありませんが、このコードは時間と日付のフォーマットを開始するのに役立つかもしれません:

import datetime
print datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S')
于 2012-09-25T18:22:18.853 に答える