在 Python 中转换 Epoch 到 Datetime

Rayven Esplanada 2023年10月10日
  1. 在 Python 中使用 time 模块将纪元转换为日期时间
  2. 在 Python 中使用 datetime 模块把 Epoch 转换为 Datetime
在 Python 中转换 Epoch 到 Datetime

本教程将介绍如何在 Python 中把 Unix epoch 秒数转换为 datetime 格式。

Epoch/纪元是一个术语,指的是自纪元日期–1970 年 1 月 1 日以来所经过的秒数。1970 年是 UNIX 操作系统的发布日期。Epoch 时间也被称为 UNIX 时间戳。

例如,2020 年 11 月 25 日(00:00:00)的纪元是 1606262400,这是自 1970 年 1 月 1 日到该日的秒数。

在 Python 中使用 time 模块将纪元转换为日期时间

Python time 模块提供了方便的时间相关函数。该函数为 UNIX 时间戳相关的计算提供了很多支持。

例如,函数 time.localtime() 接受 epoch 秒作为参数,并生成一个由 9 个时间序列组成的时间值序列。

让我们在这个例子中使用一个随机的纪元时间。

import time

epoch_time = 1554723620
time_val = time.localtime(epoch_time)

print("Date in time_struct:", time_val)

输出:

Date in time_struct: time.struct_time(tm_year=2019, tm_mon=4, tm_mday=8, tm_hour=19, tm_min=40, tm_sec=20, tm_wday=0, tm_yday=98, tm_isdst=0)

localtime() 输出一个元组 struct_time(),其中包含了纪元时间的详细信息,包括确切的年、月、日和其他纪元时间的详细信息。

time 模块有另一个函数 time.strftime() 来将元组转换为日期时间格式。

该函数接受 2 个参数,第一个参数是包含指定转换格式的字符串,第二个参数是 struct_time() 元组。

现在,将上面相同的纪元时间例子转换为可读的日期时间格式。

import time

epoch_time = 1554723620
time_formatted = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(epoch_time))

print("Formatted Date:", time_formatted)

输出:

Formatted Date: 2019-04-08 19:40:20

除了这种格式,另一种通用的日期格式是月份的全称,包括星期几。让我们试一试。

import time

epoch_time = 1554723620
time_formatted = time.strftime("%A, %B %-d, %Y %H:%M:%S", time.localtime(epoch_time))

print("Formatted Date:", time_formatted)
Formatted Date: Monday, April 8, 2019 19:40:20

strftime() 中另一种只需要一个字符的有用格式是%c,它是 Locale 的通用日期和时间表示法。

time_formatted = time.strftime("%c", time.localtime(epoch_time))

print("Formatted Date:", time_formatted)

输出:

Formatted Date: Mon Apr 8 19:40:20 2019

在 Python 中使用 datetime 模块把 Epoch 转换为 Datetime

datetime 是 Python 中另一个支持时间相关函数的模块。不同的是,time 模块专注于 Unix 时间戳,而 datetime 支持广泛的日期和时间函数,同时仍然支持 time 模块的许多操作。

datetime 有一个函数 fromtimestamp(),它接受 epoch 秒和 datetime 对象。

让我们尝试一下这个模块的不同的纪元秒的例子。

注意
这里,datetime 是有意重复两次的。在 datetime 模块中,有一个 datetime 对象,其函数为 fromtimestamp()datetime 也是 datetime 模块中的对象。
import datetime

epoch_time = 561219765
time_val = datetime.datetime.fromtimestamp(epoch_time)

print("Date:", time_val)

如果 datetime.datetime 是专门在 datetime 模块中使用的对象,那么就从模块中导入它,以避免代码显得多余。

from datetime import datetime

输出:

Date: 1987-10-14 22:22:45

为了将 datetime 转换为另一种格式,datetime() 还有一个实用函数 strftime(),它提供了与 time.strftime() 相同的功能。

import datetime

epoch_time = 561219765
time_formatted = datetime.datetime.fromtimestamp(epoch_time).strftime(
    "%A, %B %-d, %Y %H:%M:%S"
)

print("Formatted Date:", time_formatted)

输出:

Formatted Date: Wednesday, October 14, 1987 22:22:45

综上所述,这就是 Python 中把 epoch 转换为 datetime 格式的两种主要方法。timedatetime 模块都提供了可以方便地用于日期时间转换的函数。

这两个模块都有函数 strftime(),这是一种方便的格式化日期的方法。

这里有一个参考文献,可以熟悉 Python 中的日期时间格式,以便能够使用 strftime() 自定义日期格式。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相关文章 - Python DateTime