일반 형식으로 날짜를 인쇄하는 방법은 무엇입니까?


682

이것은 내 코드입니다.

import datetime
today = datetime.date.today()
print(today)

이것은 2008-11-22정확히 내가 원하는 것입니다.

그러나 나는 이것을 추가하고있는 목록을 가지고 있으며 갑자기 모든 것이 "삐걱 거리는"것입니다. 코드는 다음과 같습니다.

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)

다음이 인쇄됩니다.

[datetime.date(2008, 11, 22)]

어떻게 간단한 데이트를 할 수 2008-11-22있습니까?


13
짧은 대답 :str() 목록의 각 요소에 적용 하면 print솔로 today객체에 암시 적으로 수행 된 것이기 때문입니다 .
Lutz Prechelt

답변:


947

왜 : 날짜는 객체입니다

파이썬에서 날짜는 객체입니다. 따라서, 그것들을 조작 할 때, 타임 스탬프 나 어떤 것도 아닌 문자열이 아닌 객체를 조작합니다.

파이썬의 모든 객체에는 두 개의 문자열 표현이 있습니다.

  • "print"가 사용하는 정규 표현은 str()함수를 사용하여 얻을 수 있습니다 . 대부분의 경우 사람이 읽을 수있는 가장 일반적인 형식이며 표시를 쉽게하는 데 사용됩니다. 그래서 str(datetime.datetime(2008, 11, 22, 19, 53, 42))당신에게 제공합니다 '2008-11-22 19:53:42'.

  • 객체의 특성을 나타내는 데 사용되는 대체 표현입니다 (데이터). 그것은 사용하여 얻을 수있는 repr()기능을하고 개발하거나 디버깅하는 동안 어떤 데이터를 어떤 사용자의 조작 알고 편리합니다. repr(datetime.datetime(2008, 11, 22, 19, 53, 42))당신에게 제공합니다 'datetime.datetime(2008, 11, 22, 19, 53, 42)'.

"print"를 사용하여 날짜를 인쇄 str()하면 멋진 날짜 문자열을 볼 수 있습니다. 그러나 인쇄 할 때 mylist객체 목록을 인쇄했으며 Python은을 사용하여 데이터 세트를 나타내려고했습니다 repr().

어떻게 : 당신은 그걸로 하시겠습니까?

날짜를 조작 할 때는 날짜 개체를 계속 사용하십시오. 그들은 수천 가지 유용한 메소드를 얻었으며 대부분의 Python API는 날짜가 객체 일 것으로 예상합니다.

표시하려면을 사용하십시오 str(). 파이썬에서는 모든 것을 명시 적으로 캐스팅하는 것이 좋습니다. 인쇄 할 때가되면을 사용하여 날짜의 문자열 표현을 얻으십시오 str(date).

마지막 한가지. 날짜를 인쇄하려고 할 때 인쇄했습니다 mylist. 날짜를 인쇄하려면 컨테이너 (목록)가 아닌 날짜 개체를 인쇄해야합니다.

EG, 당신은 목록에 모든 날짜를 인쇄하려고합니다 :

for date in mylist :
    print str(date)

참고 특정 경우에 , 당신은 심지어 생략 할 수 있습니다 str()인쇄는 당신을 위해 그것을 사용하기 때문이다. 그러나 습관이되어서는 안됩니다 :-)

실제 사례, 코드 사용

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22

# It's better to always use str() because :

print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22

print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects

print "This is a new day : " + str(mylist[0]) 
>>> This is a new day : 2008-11-22

고급 날짜 형식

날짜는 기본 표현이지만 특정 형식으로 인쇄 할 수 있습니다. 이 경우 strftime()메서드를 사용하여 사용자 지정 문자열 표현을 얻을 수 있습니다 .

strftime() 날짜 형식을 지정하는 방법을 설명하는 문자열 패턴이 필요합니다.

EG :

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

다음의 모든 문자 "%"는 무언가에 대한 형식을 나타냅니다.

  • %d 요일 번호입니다
  • %m 월 번호입니다
  • %b 월 약어입니다
  • %y 마지막 두 자리 연도
  • %Y 일년 내내

기타

공식 문서 를 보거나 McCutchen의 빠른 참조 를 통해 모든 것을 알 수는 없습니다.

이후 PEP3101 , 모든 객체는 문자열의 방법은 형식에 의해 자동으로 사용하는 고유의 형식을 가질 수 있습니다. 날짜 시간의 경우 형식은 strftime에서 사용 된 것과 동일합니다. 따라서 다음과 같이 위와 동일하게 수행 할 수 있습니다.

print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'

이 형식의 장점은 다른 개체를 동시에 변환 할 수 있다는 것입니다. 형식화 된 문자열 리터럴 (Python 3.6, 2016-12-23부터)을
도입하면 다음과 같이 작성할 수 있습니다.

import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'

현지화

올바른 방식으로 사용하면 날짜가 현지 언어와 문화에 자동으로 적응할 수 있지만 약간 복잡합니다. SO (Stack Overflow) ;-)에 대한 다른 질문이있을 수 있습니다.


3
BTW 거의 파이썬의 모든 데이터 유형은 클래스 (immutables를 제외하고는 있지만 서브 클래스화할 수) stackoverflow.com/questions/865911/...
Yauhen Yakimovich

1
"거의"무엇을 의미합니까? str과 int 에는 'type'을 포함 하는 클래스 속성이 있으므로 메타 클래스 유형의 인스턴스이므로 클래스 자체가 있습니다.
전자 Satiss

4
이것은 정확히 용어의 문제입니다. type! = class? 여기 자신을 위해이 문제를 해결하기 위해 노력하고 programmers.stackexchange.com/questions/164570/...
Yauhen Yakimovich을

1
당신이 클래스의 인스턴스라면, 당신은 객체입니다. 왜 더 복잡해야합니까?
e-satis

9
파이썬의 모든 가치는 객체입니다. 모든 객체에는 유형이 있습니다. "type"== "class" 공식적으로 (또한 inspect.isclass확인하십시오). 사람들은 내장형은 "타입", 나머지는 "클래스"라고 말하는 경향이 있지만 중요하지 않습니다.
Kos

340
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

편집하다:

Cees 제안 후, 나는 또한 시간을 사용하기 시작했습니다.

import time
print time.strftime("%Y-%m-%d %H:%M")

6
datetime.datetime?
Cees Timmerman

2
당신은에서 사용할 수있는 datetime import datetime다음과 print datetime().now().strftime("%Y-%m-%d %H:%M"). 구문 차이 만 있습니다.
Daniel Magnusson '11

7
from datetime import date; date.today().strftime("%Y-%m-%d")여전히 나에게 비현실적으로 보이지만,이없는 것이 가장 좋습니다 import time. datetime 모듈은 날짜 수학을위한 것이라고 생각합니다.
Cees Timmerman

2
내가 가장 좋아하는 것은 from datetime import datetime as dt지금 우리가 함께 할 수 있습니다dt.now()
diewland

164

date, datetime 및 time 객체는 모두 명시 적 형식 문자열을 제어하여 시간을 나타내는 문자열을 만들기 위해 strftime (format) 메서드를 지원합니다.

다음은 지시문과 의미가있는 형식 코드 목록입니다.

    %a  Locales abbreviated weekday name.
    %A  Locales full weekday name.      
    %b  Locales abbreviated month name.     
    %B  Locales full month name.
    %c  Locales appropriate date and time representation.   
    %d  Day of the month as a decimal number [01,31].    
    %f  Microsecond as a decimal number [0,999999], zero-padded on the left
    %H  Hour (24-hour clock) as a decimal number [00,23].    
    %I  Hour (12-hour clock) as a decimal number [01,12].    
    %j  Day of the year as a decimal number [001,366].   
    %m  Month as a decimal number [01,12].   
    %M  Minute as a decimal number [00,59].      
    %p  Locales equivalent of either AM or PM.
    %S  Second as a decimal number [00,61].
    %U  Week number of the year (Sunday as the first day of the week)
    %w  Weekday as a decimal number [0(Sunday),6].   
    %W  Week number of the year (Monday as the first day of the week)
    %x  Locales appropriate date representation.    
    %X  Locales appropriate time representation.    
    %y  Year without century as a decimal number [00,99].    
    %Y  Year with century as a decimal number.   
    %z  UTC offset in the form +HHMM or -HHMM.
    %Z  Time zone name (empty string if the object is naive).    
    %%  A literal '%' character.

이것이 파이썬에서 날짜 및 시간 모듈로 할 수있는 일입니다

    import time
    import datetime

    print "Time in seconds since the epoch: %s" %time.time()
    print "Current date and time: ", datetime.datetime.now()
    print "Or like this: ", datetime.datetime.now().strftime("%y-%m-%d-%H-%M")


    print "Current year: ", datetime.date.today().strftime("%Y")
    print "Month of year: ", datetime.date.today().strftime("%B")
    print "Week number of the year: ", datetime.date.today().strftime("%W")
    print "Weekday of the week: ", datetime.date.today().strftime("%w")
    print "Day of year: ", datetime.date.today().strftime("%j")
    print "Day of the month : ", datetime.date.today().strftime("%d")
    print "Day of week: ", datetime.date.today().strftime("%A")

다음과 같은 내용이 인쇄됩니다.

    Time in seconds since the epoch:    1349271346.46
    Current date and time:              2012-10-03 15:35:46.461491
    Or like this:                       12-10-03-15-35
    Current year:                       2012
    Month of year:                      October
    Week number of the year:            40
    Weekday of the week:                3
    Day of year:                        277
    Day of the month :                  03
    Day of week:                        Wednesday

1
이로 인해 "더 많은 답변을 얻을 수있는 답변"이 없었던 문제가 해결되었습니다. 그러나 내 문제는 OP와 다릅니다. 몇 달 동안 텍스트로 인쇄하기를 원했습니다 ( "2"가 아닌 "2
Nathan


36

이것은 더 짧습니다 :

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'

27
# convert date time to regular format.

d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)

# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)

산출

2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34

25

또는

from datetime import datetime, date

"{:%d.%m.%Y}".format(datetime.now())

Out : '25 .12.2013

또는

"{} - {:%d.%m.%Y}".format("Today", datetime.now())

Out : '오늘-25.12.2013'

"{:%A}".format(date.today())

아웃 : '수요일'

'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())

아웃 : '__main ____ 2014.06.09__16-56.log'



8

형식화 된 문자열 리터럴 (Python 3.6, 2016-12-23부터 )에서 datetime형식 별 문자열 형식화 ( .를 사용한 nk9의 답변 참조 ) :str.format()

>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'

날짜 / 시간 형식 지시어는의 한 부분으로 설명하지 않은 형식 문자열 구문 이 아니라에서 date, datetimetimestrftime()문서. 1989 C 표준을 기반으로하지만 Python 3.6 이후 일부 ISO 8601 지시문을 포함합니다.


또한이 정보를 허용 된 답변에 추가했습니다 .
처리

strftime에는 실제로 "ISO 8601 출력"이 포함되어 있지 않습니다. "지시문"이 있지만 "매일"과 같은 특정 토큰에 대해서만 ISO 8601 타임 스탬프 전체가 아니라 항상 성가시다.
anarcat

5

날짜 시간 오브젝트를 문자열로 변환해야합니다.

다음 코드는 저에게 효과적이었습니다.

import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection

도움이 더 필요하면 알려주십시오.


3
어서! 초보자가 날짜 객체 대신 문자열을 저장하도록 권장하지 마십시오. 그는 그것이 좋은지 나쁜지 알 수 없을 것이다 ...
e-satis

e- 만족 : 필요한 것이 문자열이라면, 가장 중요한 것은 무엇입니까? 우리는 펌웨어 빌드 날짜를 항상 문자열로 저장합니다. 때로는 필요한 모든 것이 간단한 타임 스탬프 (YAGNI 및 모두) 인 경우 전체 객체를 저장하는 것이 과도합니다.
HanClinto

3
예, 어떤 경우에는 그렇습니다. 단지 초보자가 이러한 경우를 식별 할 수 없다는 것을 의미합니다. 오른쪽 발부터 ​​시작하겠습니다 :-)
e-satis

4

편의상 너무 많은 모듈을 가져 오는 아이디어가 싫습니다. 이 경우 datetime새 모듈을 호출하는 대신 사용 가능한 모듈로 작업하고 싶습니다 time.

>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'

1
한 줄의 코드로 그렇게하는 것이 더 효율적이라고 생각합니다a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Dorian Dore


3

원하는 것을하기 위해 간단한 것을 요청한 사실을 고려하면 다음과 같이 할 수 있습니다.

import datetime
str(datetime.date.today())

3

원하는 사람들을 위해 로케일 기반 시간, 사용을 포함하지 날짜 및 :

>>> some_date.strftime('%x')
07/11/2019

2

문자열로 추가하고 싶습니까?

import datetime 
mylist = [] 
today = str(datetime.date.today())
mylist.append(today) 
print mylist

2

print today원하는 것을 반환 하기 때문에 오늘 객체의 __str__함수는 찾고있는 문자열을 반환합니다.

그래서 당신도 할 수 mylist.append(today.__str__())있습니다.



1

내 대답에 대한 빠른 면책 조항-나는 약 2 주 동안 Python을 배우고 있었으므로 결코 전문가는 아닙니다. 따라서 내 설명이 최선이 아니며 잘못된 용어를 사용할 수 있습니다. 어쨌든, 여기 간다.

코드에서 변수를 선언 할 때 today = datetime.date.today()내장 함수의 이름으로 변수의 이름을 지정하기로 선택했습니다.

다음 코드 줄이 mylist.append(today)목록을 추가 할 때 전체 문자열을 추가했습니다.이 문자열 datetime.date.today()은 이전에 today변수를 추가하는 대신 변수 값으로 설정했습니다 today().

datetime 모듈로 작업 할 때 대부분의 코더가 사용하지는 않지만 간단한 해결책은 변수 이름을 변경하는 것입니다.

내가 시도한 것은 다음과 같습니다.

import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present

그리고 인쇄합니다 yyyy-mm-dd.


1

날짜를 (년 / 월 / 일)로 표시하는 방법은 다음과 같습니다.

from datetime import datetime
now = datetime.now()

print '%s/%s/%s' % (now.year, now.month, now.day)

1
from datetime import date
def time-format():
  return str(date.today())
print (time-format())

원하는 경우 6-23-2018이 인쇄됩니다. :)


-1
import datetime
import time

months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {'01': 'Jan', '02':'Feb','03':'Mar','04':'Apr','05':'May','06': 'Jun','07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'}
result = choices.get(month, 'default')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date

이 방법으로 다음 예제와 같이 Date 형식을 얻을 수 있습니다 : 2017 년 6 월 22 일


1
한 줄로 얻을 수있는 코드가 너무 많습니다. %b당신 과 함께 첫 3 개월 단어와 %B전체 달 을 얻을 것이다 . 예 : datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")리턴 '2018 - 10 월 04 9시 44분 8초'
빅토르 로페스

-1

나는 완전히 이해하지 못하지만 pandas올바른 형식으로 시간을 얻는 데 사용할 수 있습니다 .

>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>> 

과:

>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']

그러나 문자열을 저장하지만 쉽게 변환 할 수 있습니다.

>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]

4
파이썬 std 라이브러리를 수행하기위한 모든 의존성은 할 방법이 있습니까?
Hejazzman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.