Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将unix时间戳字符串转换为可读日期_Python_Datetime_Unix Timestamp_Strftime - Fatal编程技术网

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

Python 将unix时间戳字符串转换为可读日期,python,datetime,unix-timestamp,strftime,Python,Datetime,Unix Timestamp,Strftime,我有一个用Python表示unix时间戳(即“1284101485”)的字符串,我想将其转换为可读的日期。当我使用time.strftime时,我得到一个TypeError: 导入时间 >>>打印时间.strftime(“%B%d%Y”,“1284101485”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:参数必须是9项序列,而不是str 取自使用日期时间模块: from datetime import datetime ts = int("1284101485

我有一个用Python表示unix时间戳(即“1284101485”)的字符串,我想将其转换为可读的日期。当我使用
time.strftime
时,我得到一个
TypeError

导入时间 >>>打印时间.strftime(“%B%d%Y”,“1284101485”) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 TypeError:参数必须是9项序列,而不是str
取自

使用
日期时间
模块:

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

可以这样转换当前时间

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

对于UNIX时间戳中的可读时间戳,我以前在脚本中使用过:

import os, datetime

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


“2012年12月26日”

快脏一体式衬里:

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

“2013-5-5-1-9-43”

我刚刚成功地使用了:

import datetime
temp = datetime.datetime.fromtimestamp(1386181800).strftime('%Y-%m-%d %H:%M:%S')
print temp
>>> type(tstamp)
pandas.tslib.Timestamp
>>> newDt = tstamp.date()
>>> type(newDt)
datetime.date
您可以使用以使其变得简单:

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

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

datetime.datetime.utcfromtimestamp(posix_time).strftime('%Y-%m-%dT%H:%M:%SZ')
其中,posix_time是要转换的posix epoch time有两部分:

  • 将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"))
    
    在Python3上,您可以仅使用stdlib获得时区感知的日期时间(如果Python无法访问系统上的tz数据库(例如,在Windows上),则UTC偏移量可能是错误的):

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

    除了使用时间/日期时间包之外,熊猫也可以用来解决同样的问题。下面是我们如何使用熊猫时间戳转换为可读日期

    时间戳可以有两种格式:

  • 13位(毫秒)- 要将毫秒转换为日期,请使用:

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

    import pandas
    result_ms=pandas.to_datetime('1493530261000',unit='ms')
    str(result_ms)
    
    Output: '2017-04-30 05:31:01'
    
    import pandas
    result_s=pandas.to_datetime('1493530261',unit='s')
    str(result_s)
    
    Output: '2017-04-30 05:31:01'
    
  • timestamp=“124542124”
    值=datetime.datetime.fromtimestamp(时间戳)
    exct_time=value.strftime(“%d%B%Y%H:%M:%S”)
    

    还可以从时间戳中获取可读的日期,您还可以更改日期的格式。

    另一种方法是使用gmtime和format函数

    from time import gmtime
    print('{}-{}-{} {}:{}:{}'.format(*gmtime(1538654264.703337)))
    
    输出:
    2018-10-4 11:57:44

    在Python 3.6+中:

    import datetime
    
    timestamp = 1579117901
    value = datetime.datetime.fromtimestamp(timestamp)
    print(f"{value:%Y-%m-%d %H:%M:%S}")
    
    输出(UTC) 解释
    • 第1行:导入
    • 第2行:Unix时间,这是
    • 第3行:将其转换为unix时间对象,检查:
      type(value)
    • 第4行:在中打印
    奖金 要将日期保存为字符串然后打印,请使用以下命令:

    my_date = f"{value:%Y-%m-%d %H:%M:%S}"
    print(my_date)
    

    请注意,
    utcfromtimestamp
    可能导致错误,因为它返回一个原始的datetime对象。Python将原始日期时间视为本地时间,而UNIX时间指UTC

    通过在
    fromtimestamp
    中设置
    tz
    参数,可以避免这种歧义:

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

    如果本地时区具有不同的utc偏移量,则过去日期的
    .fromtimestamp()
    可能会失败。您需要一个历史时区数据库,如
    pytz
    模块(或您的操作系统)提供的数据库。或者只在UTC工作,并使用
    .utcfromtimestamp()
    @J.F.Sebastian您已经提到过这可能会在几个注释中失败-请您详细说明为什么它会在过去的日期/时间失败?(从投票结果来看,许多人都同意你的观点,并认为这很简单)任何unix时间戳都有一个简单的等效日期/时间吗?@davidhood2以python无法访问的系统(Windows)为例,将本地时区设置为过去UTC偏移量不同的时区(例如欧洲/莫斯科),调用fromtimestamp()带有过去(2011-)的时间戳。将结果与使用
    pytz
    计算的值进行比较。如果不清楚,;问一个单独的堆栈溢出问题。@davidhood2:我已经发布了。一个重要的问题是,这需要一个时间戳,以秒为单位,从纪元开始;如果你有毫秒,你必须除以1000,正如我刚刚发现的那样。
    time.ctime()
    time.localtime()
    如果本地时区有不同的utc偏移量,则过去的日期可能会失败。您需要一个历史时区数据库,如
    pytz
    模块(或您的操作系统)提供的数据库。或者只需在UTC工作并使用
    time.gmtime()
    datetime
    可能提供更宽的日期范围,因此可以使用
    datetime.utcfromtimestamp()
    代替
    time
    函数。@John La Rooy有没有类似的方法将日期时间字符串转换回Unix时间戳?或者更简洁地说:'-'.join(map(str,datetime.datetime.now().timetuple()[:6])@JelleZijlstra Eh,我更喜欢生成器表达式而不是地图。什么样的日期格式是“2013-5-5-1-9-43”?我从来没有在任何地方看到过这种格式是日期/时间的有效表示形式。你能详细说明一下是什么将其定义为无效表示形式@madoki吗?你是说不标准?与大多数其他答案相比,它的主要优点是能够将其包含在文件或目录路径中,因为空格和冒号不在标准unix目录字符集中。例如,参见每一个程序
    >>> 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'))