2012-09-25 64 views
1

可能重複:
How to print date in a regular format in Python?在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' 
+1

如果這是現場知道? –

+3

上有一個偉大的[提問](http://stackoverflow.com/questions/311627/how-to-print-date-in-a-regular-format-in-python)了。 –

+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

回答

2

Babel project提供了一個全功能的date and time localization library

您還需要iso8601 module正確解析帶有時區的日期時間字符串。

它要麼格式的日期和時間根據語言環境:

>>> 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' 

序數通過使用巴別(「第一」,「第二」等)是有點難以國際做,並且LDML format不包括這些模式。

如果必須有一個順序在你的日期格式(也許是因爲你只希望輸出中英文),你必須創建這些自己:

>>> 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' 
1

可以使用strftime()方法讓你的日期的自定義字符串表示。 strftime接受一個字符串模式,解釋你想如何格式化日期。

例如:

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

畢竟一個 「%」 的字母代表的東西的格式:

  • %d是天數
  • %M是月份
  • %y是最後兩位數的年份
  • %Y是全年

https://stackoverflow.com/a/311655

+0

我不知道你爲什麼問我張貼的問題是如何相關的,再聯繫到同樣的問題。你說我應該解釋它嗎? –

0

不是100%的回答你的問題,但是這個代碼可以幫助你開始格式化時間和日期:

import datetime 
print datetime.datetime.now().strftime('%d/%m/%Y %H:%M:%S') 
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") 
+1

'1st','2nd'和'3rd'怎麼樣? –

+0

編輯成包括這些案件 – reptilicus

+0

這比.. –

相關問題