2012-09-25 4 views
1

가능한 중복 :
How to print date in a regular format in Python?Python에서 날짜를 자연어로 변환 하시겠습니까?

내가 파이썬에서 시간대를 포함하여 자연 언어에 다음 날짜를 변환하는 방법을 알고 싶습니다

은?

입력 :

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

예상 출력 : 사전에

Wednesday, September 26 of 2012 Mountain Time 

감사합니다!

참고 편집 : 지금까지 복잡한 날짜 - 시간 문자열을 처리하지는 않지만 django humanize을 시도했습니다.

해결 방법 : 모든 정보를

감사합니다.

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' 

서수 바벨에서 사용 ('1', '2', 등) 국제적으로 할 수있는 좀 더 열심히, 그리고 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을 사용하여 끝났다. strftime은 날짜의 형식을 지정하는 방법을 설명하는 문자열 패턴을 허용합니다.

예를 들어

:

  • 퍼센트의 m은 월 번호
  • 입니다

    • 퍼센트의 d는 하루 번호는 다음과 같습니다에 "%"후

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

      모든 문자가 뭔가의 형식을 나타냅니다

    • % 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

    좀 더 복잡합니다 .. –

    관련 문제