unix 타임스탬프 문자열을 읽을 수 있는 날짜로 변환하는 중
Python에 Unix 타임스탬프를 나타내는 문자열(예: "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)
http://seehuhn.de/pages/pdate에서 가져온 정보
가장 많이 투표된 답변에서는 로컬 시간대를 사용하기 때문에 오류가 발생하기 쉬운 fromtimestamp 사용을 권장합니다.문제를 회피하려면 UTC를 사용하는 것이 좋습니다.
datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
여기서 posix_time은 변환할 Posix 에폭 시간입니다.
>>> 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'
다음 두 부분으로 구성되어 있습니다.
- unix 타임스탬프("에폭 이후 초")를 로컬 시간으로 변환합니다.
- 로컬 시간을 원하는 형식으로 표시합니다.
로컬 시간대가 과거에 다른 utc 오프셋을 가지고 있고 python이 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"))
Python 3에서는 stdlib만을 사용하여 시간대 인식 날짜/시간을 얻을 수 있습니다(Windows 등 시스템에서 python이 tz 데이터베이스에 액세스할 수 없는 경우 UTC 오프셋이 잘못될 수 있습니다).
#!/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
module은 대응하는 C API 주변의 얇은 랩퍼이기 때문에 대응하는 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))
Python 3.6+의 경우:
import datetime
timestamp = 1642445213
value = datetime.datetime.fromtimestamp(timestamp)
print(f"{value:%Y-%m-%d %H:%M:%S}")
출력(현지 시간)
2022-01-17 20:46:53
설명.
- 줄 #1: 날짜/시간 라이브러리를 가져옵니다.
- 행 번호 2: UNIX 시각. 1970-01-01 이후의 초수입니다.
- 행 3: 이것을 unix 시간 객체로 변환합니다.다음에서 확인합니다.
type(value)
- 4행: strp와 같은 형식으로 인쇄합니다.현지시간입니다.UTC 로 인쇄하려면 , 다음의 예를 참조해 주세요.
보너스
날짜를 문자열에 저장한 후 인쇄하려면 다음을 사용합니다.
my_date = f"{value:%Y-%m-%d %H:%M:%S}"
print(my_date)
UTC로 출력하려면:
value = datetime.datetime.fromtimestamp(timestamp, tz=datetime.timezone.utc)
# 2022-01-17 18:50:52
시간/시간 패키지를 사용하는 것 외에, 판다도 같은 문제를 해결하기 위해 사용될 수 있습니다.팬더를 사용하여 타임스탬프를 읽을 수 있는 날짜로 변환하는 방법은 다음과 같습니다.
타임스탬프는 다음 두 가지 형식입니다.
13자리(밀리초) - 밀리초를 현재까지 변환하려면 다음 명령을 사용합니다.
import pandas result_ms=pandas.to_datetime('1493530261000',unit='ms') str(result_ms) Output: '2017-04-30 05:31:01'
10자리(초) - 초수를 현재까지 변환하려면 다음 명령을 사용합니다.
import pandas result_s=pandas.to_datetime('1493530261',unit='s') str(result_s) Output: '2017-04-30 05:31:01'
UNIX 타임스탬프에서 사람이 읽을 수 있는 타임스탬프의 경우 이전 스크립트에서 이 타임스탬프를 사용한 적이 있습니다.
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
timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')
타임스탬프에서 읽을 수 있는 날짜를 시간과 함께 가져오고 날짜 형식을 변경할 수도 있습니다.
:utcfromtimestamp
는 순진한 datetime 객체를 반환하기 때문에 예기치 않은 결과를 초래할 수 있습니다.Python은 순진한 datetime을 로컬 시간으로 처리하며 UNIX 시간은 UTC를 나타냅니다.
하려면 , 「」를 합니다.tz
합니다.fromtimestamp
:
from datetime import datetime, timezone
dtobj = datetime.fromtimestamp(1284101485, timezone.utc)
>>> print(repr(dtobj))
datetime.datetime(2010, 9, 10, 6, 51, 25, tzinfo=datetime.timezone.utc)
이제 ISO8601 호환 형식과 같이 문자열로 포맷할 수 있습니다.
>>> print(dtobj.isoformat(timespec='milliseconds').replace('+00:00', 'Z'))
2010-09-10T06:51:25.000Z
다음 코드를 사용하여 문제가 해결되기를 바랍니다.
import datetime as dt
print(dt.datetime.fromtimestamp(int("1284101485")).strftime('%Y-%m-%d %H:%M:%S'))
import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
gmtime 및 포맷 함수를 사용하여 이를 수행할 수 있는 또 다른 방법.
from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))
★★★★★2018-10-4 11:57:44
데이터 프레임으로 작업하고 있는 경우,series cannot be converted to class int
오류입니다. 아래 코드를 사용하십시오.
new_df= pd.to_datetime(df_new['time'], unit='s')
사용방법:
from datetime import datetime
unixtime = int('1284101485')
# Print with local time
print(datetime.fromtimestamp(unixtime).strftime('%Y-%m-%d %H:%M:%S'))
# Print with UTC time
print(datetime.utcfromtimestamp(unixtime).strftime('%Y-%m-%d %H:%M:%S'))
: POSIX 타임스탬프에 대응하는 로컬 날짜를 반환합니다(예: 에 의해 반환됨
datetime.fromtimestamp(timestamp)
).time.time()
.: posix 타임스탬프에 대응하는 UTC 날짜 시간을 tzinfo None과 함께 반환합니다
datetime.utcfromtimestamp(timestamp)
(결과 객체는 순진합니다).
방금 성공적으로 사용:
>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
easy_date를 사용하여 쉽게 만들 수 있습니다.
import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")
빠르고 더러운 라이너 1개:
'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))
'2013-5-5-1-9-43'
언급URL : https://stackoverflow.com/questions/3682748/converting-unix-timestamp-string-to-readable-date
'programing' 카테고리의 다른 글
MySQL과 SQLite 양쪽에 고유한 제약 및 삽입 또는 업데이트 (0) | 2023.01.31 |
---|---|
PDO와 마리아DB (0) | 2023.01.31 |
열이 있는 경우 변경 (0) | 2023.01.21 |
레코드의 변경 내역을 추적하는 MySQL 옵션/기능이 있습니까? (0) | 2023.01.21 |
한 줄로 동적으로 인쇄 (0) | 2023.01.21 |