关于python:将unix时间戳字符串转换为可读日期

Converting unix timestamp string to readable date

我有一个用python表示unix时间戳(即"1284101485")的字符串,我想把它转换成一个可读的日期。当我使用time.strftime时,我得到一个TypeError

1
2
3
4
5
6
>>>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模块:

1
2
3
4
5
6
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'))


1
2
3
>>> from datetime import datetime
>>> datetime.fromtimestamp(1172969203.1)
datetime.datetime(2007, 3, 4, 0, 46, 43, 100000)

采取从http:/ / / / pdate seehuhn.de页


建议使用fromtimestamp评为最要之是因为它错误使用当地的时区。为了避免问题的一个更好的方法是:使用UTC

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

在POSIX POSIX时间是_时代时,你想转换


1
2
3
4
5
>>> 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在过去有没有访问到数据库是使用pytzTZ时区:

    1
    2
    3
    4
    5
    6
    7
    #!/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)

    要显示它,你可以使用任何时间格式不支持您的系统,例如:

    1
    2
    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时间,而不是去读:

    1
    2
    utc_time = datetime.utcfromtimestamp(unix_timestamp)
    print(utc_time.strftime("%Y-%m-%d %H:%M:%S.%f+00:00 (UTC)"))

    如果你真的在乎的时区问题,可能影响我的约会或是返回如果Python已经进入雅轩数据库对您的系统

    1
    2
    local_time = datetime.fromtimestamp(unix_timestamp)
    print(local_time.strftime("%Y-%m-%d %H:%M:%S.%f"))

    在Python中,你可以得到一个时区3,认识到仅用程序(UTC时间偏移可能是错的如果Python没有进入雅轩数据库在您的系统,例如,在Windows中):

    1
    2
    3
    4
    5
    6
    #!/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否则你可以使用他们的方法是:

    1
    2
    3
    4
    5
    6
    7
    8
    #!/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))

    一个人类可读的时间戳从UNIX时间戳,我有这个脚本中使用过:

    1
    2
    3
    import os, datetime

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

    输出:

    "2012年12月26日,"


    你可以这样转换当前时间

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

    在转换到不同的格式的日期字符串。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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

    使用时间/日期时间比其他包装,熊猫也可以用来解决同样的问题。这是我们如何能够使用熊猫转换时间戳到读日期:

    时间戳可以在双格式:

  • 13位(milliseconds)milliseconds日期转换,使用:

    1
    2
    3
    4
    5
    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)

    Output: '2017-04-30 05:31:01'
  • 10位(秒)日期转换秒,使用:

    1
    2
    3
    4
    5
    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)

    Output: '2017-04-30 05:31:01'

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

    得到的日期时间戳时间从读,所以你可以改变格式的日期。


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

    这是另一种方式可以做使用gmtime和格式的功能;

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

    输出:2018-10-4 11:57:44


    我只是成功的使用:

    1
    2
    3
    4
    5
    >>> type(tstamp)
    pandas.tslib.Timestamp
    >>> newDt = tstamp.date()
    >>> type(newDt)
    datetime.date


    你可以使用简单的_约会让轻松:

    1
    2
    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 - 1 9 43?