Program Tip

유닉스 타임 스탬프 문자열을 읽을 수있는 날짜로 변환

programtip 2020. 9. 29. 18:25
반응형

유닉스 타임 스탬프 문자열을 읽을 수있는 날짜로 변환


파이썬에서 유닉스 타임 스탬프 (예 : "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 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'

두 부분이 있습니다.

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

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

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

Functions from the time module are thin wrappers around the corresponding C API and therefore they may be less portable than the corresponding datetime methods otherwise you could use them too:

#!/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))  

For a human readable timestamp from a UNIX timestamp, I have used this in scripts before:

import os, datetime

datetime.datetime.fromtimestamp(float(os.path.getmtime("FILE"))).strftime("%B %d, %Y")

Output:

'December 26, 2012'


You can convert the current time like this

t=datetime.fromtimestamp(time.time())
t.strftime('%Y-%m-%d')
'2012-03-07'

To convert a date in string to different formats.

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

Other than using time/datetime package, pandas can also be used to solve the same problem.Here is how we can use pandas to convert timestamp to readable date:

Timestamps can be in two formats:

  1. 13 digits(milliseconds) - To convert milliseconds to date, use:

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
  2. 10 digits(seconds) - To convert seconds to date, use:

    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    

timestamp ="124542124"
value = datetime.datetime.fromtimestamp(timestamp)
exct_time = value.strftime('%d %B %Y %H:%M:%S')

Get the readable date from timestamp with time also, also you can change the format of the date.


Another way that this can be done using gmtime and format function;

from time import gmtime
print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))

Output: 2018-10-4 11:57:44


import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp

i just successfully used:

>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date

quick and dirty one liner:

'-'.join(str(x) for x in list(tuple(datetime.datetime.now().timetuple())[:6]))

'2013-5-5-1-9-43'


You can use easy_date to make it easy:

import date_converter
my_date_string = date_converter.timestamp_to_string(1284101485, "%B %d, %Y")

참고URL : https://stackoverflow.com/questions/3682748/converting-unix-timestamp-string-to-readable-date

반응형