首页 文章

将unix时间戳字符串转换为可读日期

提问于
浏览
634

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

14 回答

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

    我刚成功使用:

    >>> type(tstamp)
    pandas.tslib.Timestamp
    >>> newDt = tstamp.date()
    >>> type(newDt)
    datetime.date
    
  • 191
    timestamp ="124542124"
    value = datetime.datetime.fromtimestamp(timestamp)
    exct_time = value.strftime('%d %B %Y %H:%M:%S')
    

    从时间戳开始随时间获取可读日期,您也可以更改日期格式 .

  • 132

    使用 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'))
    
  • 3
    >>> 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'
    
  • 68
    >>> from datetime import datetime
    >>> datetime.fromtimestamp(1172969203.1)
    datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)
    

    取自http://seehuhn.de/pages/pdate

  • 0

    您可以使用easy_date轻松实现:

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

    你可以像这样转换当前时间

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

    投票最多的回答建议使用fromtimestamp,因为它使用本地时区,因此很容易出错 . 为了避免问题,更好的方法是使用UTC:

    datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
    

    posix_time是您要转换的Posix纪元时间

  • 2

    除了使用 time/datetime 包之外, pandas 也可以用来解决同样的问题 . 这就是我们如何使用 pandastimestamp 转换为 readable date

    时间戳可以采用两种格式:

    • 13位(毫秒) - 要将 milliseconds 转换为日期,请使用:
    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
    • 10位数(秒) - 要将 seconds 转换为日期,请使用:
    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    
  • -1

    快速和脏的一个班轮:

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

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

  • 22

    有一种有趣的方式,您不必担心时区,utc等 . 只需将字符串转换为Excel日期格式,然后转换为可读的日期/时间:

    import datetime
    
    def xldate_to_datetime(xldate):
        temp = datetime.datetime(1899, 12, 30)
        delta = datetime.timedelta(days=xldate)
        return temp+delta
    
    ts = "1284101485"
    tsxl = ((int(ts)/60)/60)/24 + 25569
    readabledate =  xldate_to_datetime(tsxl)
    print(readabledate)
    
  • -2

    对于来自UNIX时间戳的人类可读时间戳,我之前在脚本中使用过此:

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

    输出:

    '2012年12月26日'

  • 950

    有两个部分:

    • 将unix时间戳("seconds since epoch")转换为本地时间

    • 以所需格式显示当地时间 .

    即使本地时区过去具有不同的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获取时区感知日期时间(如果python无法访问系统上的tz数据库,例如在Windows上,则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 模块中的函数是相应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))
    

相关问题