首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将毫秒转换为时间戳

问将毫秒转换为时间戳
EN

Stack Overflow用户
提问于 2022-04-07 21:02:13
回答 3查看 137关注 0票数 -2

1634515205001转换为日期和计时器为:星期一202100:00:05

我试图使用以下方法将1634515205001转换为日期和时间:

导入日期

代码语言:javascript
复制
dt1 = datetime.datetime.strptime(
                    str(datetime.datetime.fromtimestamp(1634515205001 / 1000)),
                    "%Y-%m-%d %H:%M:%S.%f").strftime(
                    '%Y-%m-%dT%H:%M:%SZ')

print('dt1' , dt1)

其中的指纹:

代码语言:javascript
复制
dt1 2021-10-18T01:00:05Z

为什么需要除以1000 (1634515205001 / 1000)?使用:

代码语言:javascript
复制
dt1 = datetime.datetime.strptime(
    str(datetime.datetime.fromtimestamp(1634515205001)),
    "%Y-%m-%d %H:%M:%S.%f").strftime(
    '%Y-%m-%dT%H:%M:%SZ')

print('dt1', dt1)

呈现:

代码语言:javascript
复制
    str(datetime.datetime.fromtimestamp(1634515205001)),
OSError: [Errno 22] Invalid argument

fromtimestamp不接受毫秒作为参数吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-07 21:08:53

datetime.fromtimestamp()函数以秒(而不是毫秒)为单位转换时间,因此需要以毫秒为单位转换为秒(除以1000)。

此调用试图计算自1970年1月1日至1970年(即53765 )以来的1634515205001秒,并引发异常。

代码语言:javascript
复制
dt = datetime.fromtimestamp(1634515205001)

可以通过调用time.time()获取当前时间的时间(以秒为单位),从而获得当前时间的预期数字数。

代码语言:javascript
复制
print(time.time())

输出:

代码语言:javascript
复制
1649365827.417279     <= 10 digits before the decimal place

时区

函数zone时间戳()知道时区,因此如果不提供时区参数,则日期时间被转换为本地时区。如果未指定时区,且时间戳时区与本地时区不同,则转换日期时间将被错误计算。在当地时区下方是UTC-4.

代码语言:javascript
复制
dt = datetime.fromtimestamp(1634515205.001, tz=timezone.utc)
print(dt) # => 2021-10-18 00:00:05.001000+00:00

dt = datetime.fromtimestamp(1634515205.001)
print(dt) # => 2021-10-17 20:00:05.001000

警告:由于天真的datetime对象被许多datetime方法当作本地时间处理,所以最好使用感知的日期时间来表示UTC中的时间。因此,在UTC中创建表示特定时间戳的对象的推荐方法是调用datetime.fromtimestamp(timestamp, tz=timezone.utc)。

票数 1
EN

Stack Overflow用户

发布于 2022-04-07 21:07:31

要回答您的问题,是,在计算日期时需要秒而不是毫秒。

票数 1
EN

Stack Overflow用户

发布于 2022-04-07 21:11:20

在文献资料中,datetime.datetime.fromtimestamp函数定义说:

返回与POSIX时间戳对应的本地日期,如time.time()返回的日期。

POSIX timestamp是自1970年1月1日(UTC)以来已经过去的秒数。

所以是的,fromtimestamp不接受毫秒,因为POSIX时间戳被定义为秒

如果您正在处理毫秒,您还可以选择使用以下内容:

代码语言:javascript
复制
datetime = datetime(1970, 1, 1) + timedelta(milliseconds=1634515205001)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71788874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档