您的位置:

Python 纪元到Datetime

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

  1. 将日期时间转换为纪元时间
  2. 将纪元转换为日期时间字符串
  3. 将纪元转换为日期时间毫秒
  4. 将纪元转换为日期时间时区
  5. 将 Unix 纪元转换为日期时间
  6. 将日期时间转换为以毫秒为单位的纪元时间
  7. 将纪元时间戳转换为日期时间
  8. Python 纪元日期时间年份超出范围

但是在开始之前,让我们简单了解一下 Python 中的纪元时间。

Python 中的纪元时间是什么?

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

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

我们可以使用 Pythondatetime . frontimestamp()函数将历元时间转换为 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 . frontimestamp()函数,以便将纪元时间转换为 DateTime 然后为用户打印输出。因此,提供的变量被成功转换为日期时间。

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

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

示例:


# 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 包。然后,我们定义了一个存储纪元时间值的变量,该值是使用给定日期时间的时间戳()函数计算的,并为用户打印了计算值。因此,给定的日期时间已成功转换为纪元时间。

使用 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 . frontimestamp()函数将给定的纪元时间转换为 datetime,然后将其传递给 strftime() 函数,将 datetime 对象转换为 datetime 字符串。str time()函数参数是我们想要自定义字符串的格式代码。

  1. %Y 表示年份
  2. %m 表示月份
  3. %d 指定日期
  4. %H 表示一个小时
  5. %M 表示分钟
  6. %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 . frontimestamp()函数将这个十进制值转换为 datetime 毫秒格式。

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

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

示例:


# 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 库的时区()功能,将参数指定为“CSt6CDT”。此函数返回指定时区的当前日期。然后我们使用 localize() 函数来定位结果。

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

这个将 Unix 纪元时间转换为 DateTime 的过程类似于我们之前所做的。这个过程涉及到datetime . frontime stamp()函数将 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 . frontimestamp()函数将 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() 函数将日期时间字符串转换为日期时间对象。然后,我们使用时间戳()函数将对象转换为纪元时间格式。最后,我们还将历元时间乘以一千,以便将其转换为毫秒。

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

我们可以使用datetime . frontimestamp()函数将历元时间戳转换为 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 . frontimestamp()函数将纪元时间戳转换为 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 epoch_time = datetime.datetime(1960, 6, 10, 0, 0).timestamp()
OSError: [Errno 22] Invalid argument 

说明:

在上面的例子中,我们提供了日期时间,年份 1960 ,在年份 1970 之前,不在时间戳范围内。因此,程序将返回一个错误作为无效参数。

我们可以通过将 1950 的日期替换为 1970 之后的任何日期来修复这个无效参数错误。