Python 纪元到Datetime

发布时间:2022-07-24

在接下来的教程中,我们将通过一些例子来理解 Python 编程语言中历元到日期时间的转换。我们将使用 Python epoch 分别将 epoch 转换为日期和时间。我们还将涵盖以下主题:

  1. 将日期时间转换为纪元时间
  2. 将纪元转换为日期时间字符串
  3. 将纪元转换为日期时间毫秒
  4. 将纪元转换为日期时间时区
  5. 将 Unix 纪元转换为日期时间
  6. 将日期时间转换为以毫秒为单位的纪元时间
  7. 将纪元时间戳转换为日期时间
  8. Python 纪元日期时间年份超出范围 但是在开始之前,让我们简单了解一下 Python 中的纪元时间。

Python 中的纪元时间是什么?

纪元时间,也称为 POSIX 时间、Unix 时间和 Unix 时间戳,表示自 1970 年 1 月 1 日以来经过的秒数,不包括闰秒。Unix 时间包含十位数字,可以同时代表所有时区。

使用 Python 将纪元时间转换为日期时间

我们可以使用 datetime.fromtimestamp() 函数将历元时间转换为 DateTime。让我们考虑以下示例,演示 Python 纪元到日期时间的转换。 示例:

# importing the datetime package
import datetime
# given epoch time
epoch_time = 40246871
# using the datetime.fromtimestamp() function
date_time = datetime.datetime.fromtimestamp( epoch_time )
# printing the value
print("Given epoch time:", epoch_time)
print("Converted Datetime:", date_time )

输出:

Given epoch time: 40246871
Converted Datetime: 1971-04-12 01:11:11

说明: 在上面的例子中,我们已经导入了日期时间库。然后我们定义了一个变量,以秒为单位存储纪元时间的值。然后,我们使用了 datetime.fromtimestamp() 函数,以便将纪元时间转换为 DateTime 然后为用户打印输出。因此,提供的变量被成功转换为日期时间。

使用 Python 将日期时间转换为纪元时间

为了将日期时间转换为历元时间,我们将使用 timestamp() 函数。首先,让我们考虑以下示例,该示例说明了日期时间到纪元时间的转换。 示例:

# importing the datetime package
import datetime
# using the timestamp() function to convert datetime into epoch time
epoch_time = datetime.datetime(2021, 6, 9, 2, 0).timestamp()
# printing the values
print("Converted epoch time:", epoch_time)

输出:

Converted epoch time: 1623184200.0

说明: 在上例中,我们再次导入了 datetime 包。然后,我们定义了一个存储纪元时间值的变量,该值是使用给定日期时间的 timestamp() 函数计算的,并为用户打印了计算值。因此,给定的日期时间已成功转换为纪元时间。

使用 Python 将纪元时间转换为日期时间字符串

为了将历元时间转换为 datetime 字符串,我们需要将历元时间转换为 datetime,然后将结果 datetime 变量传递给 strftime() 函数,将其成功转换为 datetime 字符串。 示例:

# importing the datetime package
import datetime
# given epoch time
epoch_time = 700024
# using datetime.fromtimestamp() function to convert epoch time into datetime object
mytimestamp = datetime.datetime.fromtimestamp( epoch_time )
# using strftime() function to convert
datetime_str = mytimestamp.strftime( "%Y - %m - %d  %H : %M : %S")
# printing the values
print("Given epoch time:", epoch_time)
print("Converted datetime string:", datetime_str)

输出:

Given epoch time: 700024
Converted datetime string: 1970 - 01 - 09  07 : 57 : 04

说明: 在上面的例子中,我们再次导入了 datetime 库。然后,我们使用 datetime.fromtimestamp() 函数将给定的纪元时间转换为 datetime,然后将其传递给 strftime() 函数,将 datetime 对象转换为 datetime 字符串。strftime() 函数参数是我们想要自定义字符串的格式代码。

  • %Y 表示年份
  • %m 表示月份
  • %d 指定日期
  • %H 表示小时
  • %M 表示分钟
  • %S 表示秒

使用 Python 将纪元时间转换为日期时间毫秒

我们可以使用将纪元时间转换为日期时间的方法,从纪元时间获得日期时间和毫秒。让我们考虑下面的例子来证明这一点。 示例:

# importing the datetime package
import datetime
# given epoch time
epoch_time = 402471.238201
# using the datetime.fromtimestamp() function
date_time = datetime.datetime.fromtimestamp( epoch_time )
# printing the value
print("Given epoch time:", epoch_time)
print("Converted Datetime:", date_time )

输出:

Given epoch time: 402471.238201
Converted Datetime: 1970-01-05 21:17:51.238201

说明: 在上面的例子中,我们已经导入了日期时间包,并定义了一个变量来存储以小数表示的纪元时间值。然后,我们使用 datetime.fromtimestamp() 函数将这个十进制值转换为 datetime 毫秒格式。

使用 Python 将纪元时间转换为日期时间时区

我们可以使用 pytz 包的 timezone() 功能,将纪元时间转换为日期时间时区。让我们考虑下面的例子,演示相同的转换。 示例:

# importing the required package(s) and module(s)
from datetime import datetime
import pytz
# using the timezone() function
my_timezone = pytz.timezone('CST6CDT')
# using the localize() function
date_timezone = my_timezone.localize( datetime( 2021, 6, 10, 9, 34, 32 ), is_dst = None )
# printing the values
print( "DateTime Time zone:", date_timezone )

输出:

DateTime Time zone: 2021-06-10 09:34:32-05:00

说明: 在上面的例子中,除了 pytz 库之外,我们还从 datetime 包中导入了 datetime 模块。然后,我们使用了 pytz 库的 timezone() 功能,将参数指定为 "CST6CDT"。此函数返回指定时区的当前日期。然后我们使用 localize() 函数来定位结果。

使用 Python 将 Unix 纪元时间转换为日期时间

这个将 Unix 纪元时间转换为 DateTime 的过程类似于我们之前所做的。这个过程涉及到 datetime.fromtimestamp() 函数将 Unix 纪元时间转换为 DateTime 对象,并使用 strftime() 函数将该对象转换为合适的 DateTime 格式。 让我们考虑下面的例子来证明这一点。 示例:

# importing the datetime library
import datetime
# given epoch time
epoch_time = 252384207
# using the datetime.fromtimestamp() function
datetime_obj = datetime.datetime.fromtimestamp( epoch_time )
# using the strftime() function
datetime_str = datetime_obj.strftime( "%Y - %m - %d  %H : %M : %S" )
# printing the values
print( "Unix epoch time:", epoch_time )
print( "DateTime:", datetime_str )

输出:

Unix epoch time: 252384207
DateTime: 1977 - 12 - 31  08 : 13 : 27

说明: 在上面的例子中,我们再次导入了 datetime 库,并定义了一个包含 Unix 纪元时间值的变量。然后,我们使用 datetime.fromtimestamp() 函数将 Unix 纪元时间转换为 DateTime 对象。然后,我们使用 strftime() 函数将对象转换为合适的格式字符串,并为用户打印出来。

使用 Python 将日期时间转换为以毫秒为单位的纪元时间

为了将纪元日期时间转换为毫秒,我们可以使用 strptime() 函数从指定的字符串返回日期时间对象,并使用 timestamp() 函数将对象转换为秒。此外,我们需要将结果值乘以一千,以产生以毫秒为单位的纪元日期时间。 让我们考虑一个例子来证明这一点。 示例:

# importing the datetime module
from datetime import datetime
# using the strptime() function
dt_obj = datetime.strptime( '10-6-2021 10:33:35,72', '%d-%m-%Y %H:%M:%S,%f')
epoch_msec = dt_obj.timestamp() * 1000
print("epoch time in milliseconds:", epoch_msec)

输出:

epoch time in milliseconds: 1623301415720.0

说明: 在上例中,我们从日期时间库中导入了日期时间模块。然后,我们使用 strptime() 函数将日期时间字符串转换为日期时间对象。然后,我们使用 timestamp() 函数将对象转换为纪元时间格式。最后,我们还将历元时间乘以一千,以便将其转换为毫秒。

使用 Python 将纪元时间戳转换为日期时间

我们可以使用 datetime.fromtimestamp() 函数将历元时间戳转换为 DateTime。下面是一个例子: 示例:

# importing the datetime module
import datetime
# given epoch timestamp
epoch_time = 33456871
# using the datetime.fromtimestamp() function
the_datetime = datetime.datetime.fromtimestamp( epoch_time )
# printing the values
print( "epoch timestamp:", epoch_time )
print( "DateTime:", the_datetime )

输出:

epoch timestamp: 33456871
DateTime: 1971-01-23 11:04:31

说明: 在上面的例子中,我们已经导入了日期时间库,并定义了一个存储纪元时间戳值的变量。然后,我们使用 datetime.fromtimestamp() 函数将纪元时间戳转换为 datetime,并为用户打印出来。

理解 Python 中与纪元日期时间相关的错误

在 Python 编程语言中使用纪元日期时间时,我们可能会遇到一个错误,说 Python 纪元日期时间年份超出范围或 Python 无效参数。 让我们考虑一个例子来理解这个问题。 示例:

# importing the datetime module
import datetime
# using the timestamp() function
epoch_time = datetime.datetime(1960, 6, 10, 0, 0).timestamp()
# printing the values
print( epoch_time )

输出:

Traceback (most recent call last):
  File "D:\Python\epochpython.py", line 5, in <module>
    epoch_time = datetime.datetime(1960, 6, 10, 0, 0).timestamp()
OSError: [Errno 22] Invalid argument

说明: 在上面的例子中,我们提供了日期时间,年份 1960 ,在年份 1970 之前,不在时间戳范围内。因此,程序将返回一个错误作为无效参数。 我们可以通过将 1950 的日期替换为 1970 之后的任何日期来修复这个无效参数错误。