파이썬에서 유닉스 타임 스탬프 (예 : “1284101485”)를 나타내는 문자열이 있으며, 읽을 수있는 날짜로 변환하고 싶습니다. 내가 사용하는 경우 time.strftime
, 내가 얻을 TypeError
:
>>>import time
>>>print time.strftime("%B %d %Y", "1284101485")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument must be 9-item sequence, not str
답변
사용 datetime
모듈 :
from datetime import datetime
ts = int("1284101485")
# if you encounter a "year is out of range" error the timestamp
# may be in milliseconds, try `ts /= 1000` in that case
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
답변
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)
답변
가장 투표 된 답변은 로컬 시간대를 사용하므로 오류가 발생하기 쉬운 fromtimestamp를 사용하는 것이 좋습니다. 문제를 피하기 위해 더 나은 방법은 UTC를 사용하는 것입니다.
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
posix_time은 변환하려는 Posix epoch 시간입니다.
답변
>>> import time
>>> time.ctime(int("1284101485"))
'Fri Sep 10 16:51:25 2010'
>>> time.strftime("%D %H:%M", time.localtime(int("1284101485")))
'09/10/10 16:51'
답변
두 부분이 있습니다 :
- 유닉스 타임 스탬프 ( “epoch 이후의 초”)를 현지 시간으로 변환
- 현지 시간을 원하는 형식으로 표시하십시오.
과거에 현지 시간대가 다른 utc 오프셋을 가지고 있고 파이썬이 tz 데이터베이스에 액세스 할 수없는 경우에도 작동하는 현지 시간을 얻는 휴대용 방법은 pytz
시간대 를 사용하는 것입니다 .
#!/usr/bin/env python
from datetime import datetime
import tzlocal # $ pip install tzlocal
unix_timestamp = float("1284101485")
local_timezone = tzlocal.get_localzone() # get pytz timezone
local_time = datetime.fromtimestamp(unix_timestamp, local_timezone)
이를 표시하기 위해 시스템에서 지원하는 모든 시간 형식을 사용할 수 있습니다. 예 :
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
print(local_time.strftime("%B %d %Y")) # print date in your format
현지 시간이 필요하지 않은 경우 읽을 수있는 UTC 시간을 대신 가져 오십시오.
utc_time = datetime.utcfromtimestamp(unix_timestamp)
print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))
반환되는 날짜에 영향을 줄 수있는 시간대 문제에 관심 이 없거나 python이 시스템의 tz 데이터베이스에 액세스 할 수있는 경우 :
local_time = datetime.fromtimestamp(unix_timestamp)
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
파이썬 3에서는 stdlib 만 사용하여 시간대 인식 날짜 시간을 얻을 수 있습니다 (파이썬이 시스템의 tz 데이터베이스에 액세스 할 수없는 경우 UTC 오프셋은 잘못 될 수 있습니다 (예 : Windows)).
#!/usr/bin/env python3
from datetime import datetime, timezone
utc_time = datetime.fromtimestamp(unix_timestamp, timezone.utc)
local_time = utc_time.astimezone()
print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f%z (%Z)"))
time
모듈의 함수 는 해당 C API 주위의 얇은 래퍼이므로 해당 datetime
메소드 보다 이식성이 떨어질 수 있습니다. 그렇지 않으면 사용할 수도 있습니다.
#!/usr/bin/env python
import time
unix_timestamp = int("1284101485")
utc_time = time.gmtime(unix_timestamp)
local_time = time.localtime(unix_timestamp)
print(time.strftime("%Y-%m-%d %H:%M:%S", local_time))
print(time.strftime("%Y-%m-%d %H:%M:%S+00:00 (UTC)", utc_time))
답변
유닉스 타임 스탬프의 사람이 읽을 수있는 타임 스탬프를 위해, 나는 이것을 전에 스크립트에서 사용했습니다 :
import os, datetime
datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")
산출:
‘2012 년 12 월 26 일’
답변
현재 시간을 이렇게 변환 할 수 있습니다
t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'
문자열의 날짜를 다른 형식으로 변환합니다.
import datetime,time
def createDateObject(str_date,strFormat="%Y-%m-%d"):
timeStamp = time.mktime(time.strptime(str_date,strFormat))
return datetime.datetime.fromtimestamp(timeStamp)
def FormatDate(objectDate,strFormat="%Y-%m-%d"):
return objectDate.strftime(strFormat)
Usage
=====
o=createDateObject('2013-03-03')
print FormatDate(o,'%d-%m-%Y')
Output 03-03-2013