programing

unix 타임스탬프 문자열을 읽을 수 있는 날짜로 변환하는 중

firstcheck 2023. 1. 21. 10:10
반응형

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'

다음 두 부분으로 구성되어 있습니다.

  1. unix 타임스탬프("에폭 이후 초")를 로컬 시간으로 변환합니다.
  2. 로컬 시간을 원하는 형식으로 표시합니다.

로컬 시간대가 과거에 다른 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)"))

에서의 기능timemodule은 대응하는 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

시간/시간 패키지를 사용하는 것 외에, 판다도 같은 문제를 해결하기 위해 사용될 수 있습니다.팬더를 사용하여 타임스탬프를 읽을 있는 날짜변환하는 방법은 다음과 같습니다.

타임스탬프는 다음 두 가지 형식입니다.

  1. 13자리(밀리초) - 밀리초를 현재까지 변환하려면 다음 명령을 사용합니다.

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 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'))

방금 성공적으로 사용:

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

반응형