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

2024-11-28 08:37:00
admin
原创
12
摘要:问题描述:我有一个表示 Python 中 unix 时间戳的字符串(即“1284101485”),我想将其转换为可读的日期。当我使用时time.strftime,我得到一个TypeError:>>>import time >>>print time.strftime(&qu...

问题描述:

我有一个表示 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

解决方案 1:

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

解决方案 2:

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

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

解决方案 3:

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

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

其中 posix_time 是要转换的 Posix 纪元时间

解决方案 4:

分为两个部分:

  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 来获取时区感知的日期时间(如果 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))  

解决方案 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'

解决方案 6:

在 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

解决方案 7:

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

时间戳可以有两种格式:

  1. 13 位数字(毫秒) - 要将毫秒转换为日期,请使用:

import pandas
result_ms=pandas.to_datetime('1493530261000',unit='ms')
str(result_ms)

Output: '2017-04-30 05:31:01'
  1. 10 位数字(秒) - 要将转换为日期,请使用:

import pandas
result_s=pandas.to_datetime('1493530261',unit='s')
str(result_s)

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

解决方案 8:

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

import os, datetime

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

输出:

“2012 年 12 月 26 日”

解决方案 9:

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

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

解决方案 10:

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

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

解决方案 11:

使用datetime.strftime(format)

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'))
  • datetime.fromtimestamp(timestamp):返回对应于 POSIX 时间戳的本地日期,例如 返回的time.time()

  • datetime.utcfromtimestamp(timestamp):返回对应于 POSIX 时间戳的 UTC 日期时间,tzinfo 为 None。(生成的对象是简单的。)

解决方案 12:

请注意,由于它返回的是一个简单的 datetime 对象,因此utcfromtimestamp可能会导致意外结果。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

解决方案 13:

使用以下代码,我希望它能解决您的问题。

import datetime as dt

print(dt.datetime.fromtimestamp(int("1284101485")).strftime('%Y-%m-%d %H:%M:%S'))

解决方案 14:

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

解决方案 15:

另一种方法是使用 gmtime 和 format 函数来实现;

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

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

解决方案 16:

如果您正在使用数据框并且希望出现series cannot be converted to class int错误。请使用下面的代码。

new_df= pd.to_datetime(df_new['time'], unit='s')

解决方案 17:

我刚刚成功使用:

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

解决方案 18:

您可以使用easy_date来简化操作:

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

解决方案 19:

快速而肮脏的一行:

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

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

解决方案 20:

我使用pytz创建了一个将 UNIX 日期和时间转换为赫尔辛基时区的函数:

from datetime import datetime, timedelta
from pytz import timezone
import pytz
    
def convert_date_time(unix_date,unix_time):
      utc = pytz.utc
      fmt = '%a %d-%b-%Y'
      time_fmt = '%H:%M:%S'
      utc_dt = utc.localize(datetime.utcfromtimestamp(unix_date))
      utc_time = utc.localize(datetime.utcfromtimestamp(unix_time))
      hki_tz = timezone('Europe/Helsinki') # refer documentation for the TZ adjustments
      hki_dt = utc_dt.astimezone(hki_tz)
      return hki_dt.strftime(fmt), utc_time.strftime(time_fmt)

并获取值:

unixDate = 1706392800
unixTime = 79800
hkiDate, hkiTime = convert_date_time(unixDate,unixTime)
print(f"Today's date and time is: {hkiDate}, {hkiTime}")

输出如下:

Today's date and time is: Sun 28-Jan-2024, 22:10:00
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   649  
  如何借鉴华为IPD体系优化企业研发?在当今竞争激烈的市场环境中,企业要想保持技术领先和产品竞争力,必须拥有一套高效且严谨的研发管理体系。华为作为全球领先的ICT解决方案提供商,其集成产品开发(IPD, Integrated Product Development)体系与质量管理体系(如ISO 9000系列)的融合实践,...
IPD项目管理   0  
  IPD流程图的7种经典绘制方法详解在产品开发领域,集成产品开发(Integrated Product Development,简称IPD)流程被广泛应用,以提高产品开发的效率和质量。IPD流程图作为这一流程的可视化工具,其绘制方法至关重要。本文将详细介绍七种经典的IPD流程图绘制方法,帮助项目管理人员和团队更好地理解和...
IPD研发管理体系   0  
  IPD流程:企业创新管理的核心引擎在当今快速变化的市场环境中,企业要想持续保持竞争力,就必须不断进行创新。而IPD(Integrated Product Development,集成产品开发)流程作为一种先进的产品开发管理模式,正逐渐成为众多企业提升创新能力、加速产品上市速度、降低开发成本的重要选择。本文将深入探讨IP...
IPD管理   0  
  IPD流程与传统产品开发流程的概述在产品开发领域,企业不断寻求高效、系统的管理方法以确保产品能够顺利从概念转化为市场成功的产品。集成产品开发(Integrated Product Development,简称IPD)流程与传统产品开发流程是两种截然不同的管理理念和方法。传统产品开发流程往往以职能部门为核心,各部门按顺序...
IPD流程中PDCP是什么意思   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用