Python 日期时间、时间Delta、Strftime(Format) 示例

⚡ 智能摘要

Python datetime 类以及 date、time 和 timedelta 类,将日期、时间和时间间隔作为对象进行处理。datetime 模块使用 strftime() 函数格式化输出,解析字符串,并使用 timedelta 运算计算未来或过去的时间点。

  • 🔘 五类: datetime 模块将 date、time、datetime、timedelta 和 tzinfo 类分组,用于日期和时间工作。
  • ☑️ 当前值: datetime.now() 和 date.today() 返回当前日期和时间,包括星期几编号。
  • Formatting: strftime() 函数使用 %Y、%A 和 %H 等控制代码将日期时间转换为可读文本。
  • 🧪 时间差: timedelta 对象用于测量持续时间,并通过加减运算预测未来或过去的日期。trac化。
  • 🛠️ 指令: 相同的控制代码驱动 strftime() 进行输出,并驱动 strptime() 将字符串读回 datetime。
  • 🤖 人工智能工作流程: 机器学习管道提取日期时间特征,例如星期几和小时,用于时间序列模型。

Python 约会时间

In Python, 日期、时间和日期时间 类提供了许多处理日期、时间和时间间隔的函数。日期和日期时间 Python 日期和时间都是对象,因此当你操作它们时,实际上是在操作对象,而不是字符串或时间戳。无论何时需要操作日期或时间,都需要导入 datetime 模块。

日期时间类 Python 分为 5 个主要类别。

  • 日期 – 仅操作日期(月、日、年)
  • 时间 – 与日期无关的时间(时、分、秒、微秒)
  • datetime – 时间和日期的组合(月、日、年、时、秒、微秒)
  • timedelta— 用于操作日期的持续时间
  • tzinfo— 绝对值tract 类用于处理时区

如何使用日期和日期时间类

第四步)在运行日期时间格式的代码之前 Python,导入 Python 日期时间模块,如下面的屏幕截图所示。

使用日期和日期时间类

这些导入语句是 Python 这是一个可以让你无需编写任何代码即可操作日期和时间的库。

在执行之前请考虑以下几点 Python 日期时间格式代码

from datetime import date

这句话告诉 Python 解释器从 datetime 模块导入日期类 Python我们没有编写此日期功能的代码,只是将其导入供我们使用。

使用 date.today() 打印日期

date.today() 函数有多个相关属性。我们可以打印具体的日期/月份/年份以及其他许多信息。

让我们看一个例子

使用 date.today() 打印日期

今日工作日号码

date.today() 函数还可以返回星期几。以下是星期几表,以……开头。 Monday 周日为 0,周日为 6。

星期数
Monday 0
星期二 1
星期三 2
星期四 3
星期五 4
星期六 5
星期日 6

星期数对于索引取决于星期几的数组很有用。

使用 date.today() 打印日期

第四步)接下来,我们创建一个日期对象的实例。

使用日期和日期时间类

第四步)接下来,我们打印日期并运行代码。

使用日期和日期时间类

输出结果符合预期。

Python 当前日期和时间:now() today()

步骤1) 像日期对象一样,我们也可以使用 “日期时间对象” in Python. Python 日期和时间对象提供日期和时间 小时、分钟、秒和毫秒。

Python 当前日期和时间

当我们执行日期时间的代码时,它会给出当前日期和时间的输出。

步骤2) 使用“DATETIME 对象”,您也可以调用时间类。假设我们只想打印当前时间,而不包含日期。

t = datetime.time(datetime.now())
  • 我们已经导入了时间类。我们将使用 datetime.now() 为其分配当前时间值
  • 我们将当前时间的值分配给变量 t。

这会给我足够的时间。让我们运行这个程序。

Python 当前日期和时间

好的,您可以看到这里我获取了日期和时间。然后下一行,我只获取了时间。

步骤3) 我们将对星期几索引器应用到星期几数组列表中,以确定今天是星期几。

  • 工作日运算符 (wd) 根据当前是星期几而被赋予 0 到 6 之间的数字。这里我们声明了一个包含星期几列表的数组(星期一、星期二、星期三……星期日)。
  • 使用该索引值可以知道是哪一天。在我们的例子中,它是 #2,代表星期三,因此在输出中它将打印出“哪一天是星期三”。

Python 当前日期和时间

以下是使用 datetime 获取当前日期和时间的完整代码

from datetime import date
from datetime import time
from datetime import datetime
def main():
    ##DATETIME OBJECTS
    #Get today's date from datetime class
    today=datetime.now()
    #print (today)
    # Get the current time
    #t = datetime.time(datetime.now())
    #print "The current time is", t
    #weekday returns 0 (monday) through 6 (sunday)
    wd=date.weekday(today)
    #Days start at 0 for monday
    days= ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]
    print("Today is day number %d" % wd)
    print("which is a " + days[wd])

if __name__== "__main__":
    main()

如何使用 Strftime() 格式化日期和时间输出

到目前为止,我们已经学习了如何使用 datetime 和 date 属性。 对象在 Python。我们将更进一步学习如何使用格式化函数来格式化时间和日期。

步骤1) 首先我们来看看如何格式化年份的简单步骤。举个例子会更容易理解。

使用 Strftime() 格式化日期和时间输出

  • 我们所使用的 “strftime 函数” 用于格式化。
  • 该函数使用不同的 控制码 给出输出。
  • 每个控制代码都对应不同的参数,例如年、月、星期几和日期。 [(%y/%Y – 年), (%a/%A- 星期几), (%b/%B- 月份), (%d – 月份中的某一天)]。
  • 在我们的例子中, (“%Y”) 与年份类似,它打印出带世纪的完整年份(例如,2018 年)。

步骤2) 现在,如果你将(“%Y”)替换为小写,即(“%y”)并执行代码,则输出将仅显示(18)而不是(2018)。年份的世纪将不会显示,如下面的屏幕截图所示

使用 Strftime() 格式化日期和时间输出

步骤3) strf 函数可以分别声明日期、星期、月份和年份。此外,只需对 strftime 函数中的控制代码进行少量修改,即可设置文本样式。

使用 Strftime() 格式化日期和时间输出

在 strftime 函数内部,如果将 (%a) 替换为大写字母 A,即 (%A),则输出将打印为“Friday”,而不是缩写“Fri”。

使用 Strftime() 格式化日期和时间输出

步骤4) 借助“Strftime”函数,我们还可以检索本地系统时间、日期或两者。

  1. %C- 表示当地日期和时间
  2. %x- 表示当地日期
  3. %X- 表示当地时间

使用 Strftime() 格式化日期和时间输出

在输出中,你可以看到预期的结果

步骤5) “strftime 函数”允许您以 24 小时或 12 小时任意格式调用时间。

使用 Strftime() 格式化日期和时间输出

只需定义控制代码,如 %I/H 表示小时、%M 表示分钟、%S 表示秒,就可以调用不同格式的时间

完成。 时间声明 [print now.strftime(“%I:%M:%S %p) ]

完成。 时间声明 [print now.strftime(“%H:%M”)]

以下是将日期时间转换为字符串对象的完整代码。

#
#Example file for formatting time and date output
#
from datetime import datetime
def main():
   #Times and dates can be formatted using a set of predefined string
   #Control codes
      now= datetime.now() #get the current date and time
      #%c - local date and time, %x-local's date, %X- local's time
      print(now.strftime("%c"))
      print(now.strftime("%x"))
      print(now.strftime("%X"))
##### Time Formatting ####
      #%I/%H - 12/24 Hour, %M - minute, %S - second, %p - local's AM/PM
      print(now.strftime("%I:%M:%S %p")) # 12-Hour:Minute:Second:AM
      print(now.strftime("%H:%M")) # 24-Hour:Minute

if __name__== "__main__":
    main()

Timedelta 是什么 Python?

时间增量 Python 是一个表示持续时间的对象。它主要用于计算两个日期和时间之间的持续时间。它还用于检索具有特定日期和时间差的对象。timedelta 对象支持加法、减法等数学运算。trac运算、乘法、除法等。

如何使用 Timedelta 对象

与 Python timedelta 对象,您可以估计未来和过去的时间。 换句话说,它是预测任何特殊日子、日期或时间的时间跨度。

请记住,此功能不是用于打印时间或日期,而是用于计算未来或过去我们来看一个 Python timedelta 示例以便更好地理解它。

步骤1) 要运行 Timedelta 对象,您需要先声明 import 语句,然后执行代码

  1. 为 timedelta 编写导入语句
  2. 现在编写代码来根据时间增量打印出对象,如屏幕截图所示
  3. 运行代码。timedelta 代表 365 天、8 小时和 15 分钟的跨度,并打印相同的内容

Timedelta 对象

困惑吗?下一步会有所帮助-

步骤2) 让我们获取今天的日期和时间来检查我们的导入语句是否运行正常。执行代码时,它会打印出今天的日期,这意味着我们的导入语句运行正常

Timedelta 对象

步骤3) 我们将了解如何通过 delta 对象检索一年后的日期。当我们运行代码时,它会给出预期的输出。

Timedelta 对象

步骤4) 另一个关于如何使用时间增量从当前日期和时间计算未来日期的示例

Timedelta 对象

步骤5) 让我们看一个更复杂的例子。我想确定新年过去了多少天。我们将按以下方式进行

  • 使用 today= date.today() 我们将获得今天的日期
  • 我们知道新年总是在 1 月 1,1 日,但年份可能不同。使用 nyd= date(today.year,XNUMX),我们将新年存储在变量 nyd 中
  • 如果 nyd < today:比较当前日期是否大于新年。如果是,则进入 while 循环。
  • ((today-nyd).days) 给出当前日期与新年之间的差值(以天为单位)

Timedelta 对象

输出结果显示“元旦已经过去11天了”。

这是完整的工作代码

#
# Example file for working with timedelta objects
#
from datetime import date
from datetime import time
from datetime import datetime
from datetime import timedelta

# construct a basic timedelta and print it
print (timedelta(days=365, hours=8, minutes=15))
# print today's date
print ("today is: " + str(datetime.now()))
# print today's date one year from now
print ("one year from now it will be:" + str(datetime.now() + timedelta(days=365)))
# create a timedelta that uses more than one argument
# print (in one week and 4 days it will be " + str(datetime.now() + timedelta(weeks=1, days=4)))
# How many days until New Year's Day?
today = date.today()  # get todays date
nyd = date(today.year, 1, 1)  # get New Year Day for the same year
# use date comparison to see if New Year Day has already gone for this year
# if it has, use the replace() function to get the date for next year
if nyd < today:
    print ("New Year day is already went by %d days ago" % ((today - nyd).days))

Python 2示例

以下示例展示了针对相同日期和时间操作编写的代码。 Python 2,其中 print 是一个语句而不是函数。仅在维护旧版本时使用这些版本。 Python 2 代码。

from datetime import date
from datetime import time
from datetime import datetime
def main():
 	##DATETIME OBJECTS
    #Get today's date from datetime class
	today=datetime.now()
	#print today
	# Get the current time
	#t = datetime.time(datetime.now())
	#print "The current time is", t
	#weekday returns 0 (monday) through 6 (sunday)
        wd = date.weekday(today)
	#Days start at 0 for monday
        days= ["monday","tuesday","wednesday","thursday","friday","saturday","sunday"]
        print "Today is day number %d" % wd
        print "which is a " + days[wd]

if __name__== "__main__":
    main()
#
#Example file for formatting time and date output
#
from datetime import datetime
def main():
   #Times and dates can be formatted using a set of predefined string
   #Control codes
      now= datetime.now() #get the current date and time
      #%c - local date and time, %x-local's date, %X- local's time
      print now.strftime("%c")
      print now.strftime("%x")
      print now.strftime("%X")
##### Time Formatting ####   
      #%I/%H - 12/24 Hour, %M - minute, %S - second, %p - local's AM/PM
      print now.strftime("%I:%M:%S %p") # 12-Hour:Minute:Second:AM
      print now.strftime("%H:%M") # 24-Hour:Minute   

if __name__== "__main__":
    main()
#
# Example file for working with timedelta objects
#
from datetime import date
from datetime import time
from datetime import datetime
from datetime import timedelta

# construct a basic timedelta and print it
print timedelta(days=365, hours=8, minutes=15)
# print today's date
print "today is: " + str(datetime.now())
# print today's date one year from now
print "one year from now it will be:" + str(datetime.now() + timedelta(days=365))
# create a timedelta that uses more than one argument
# print "in one week and 4 days it will be " + str(datetime.now() + timedelta(weeks=1, days=4))
# How many days until New Year's Day?
today = date.today()  # get todays date
nyd = date(today.year, 1, 1)  # get New Year Day for the same year
# use date comparison to see if New Year Day has already gone for this year
# if it has, use the replace() function to get the date for next year
if nyd < today:
    print "New Year day is already went by %d days ago" % ((today - nyd).days)

常见问题

使用 `datetime.strptime(text, format)` 将字符串解析为 datetime 对象。传递与 `strftime()` 相同的指令,因此“2018-06-29”会以“%Y-%m-%d”格式显示。作为 `strftime()` 的逆操作,`strptime()` 将人类可读的文本转换回可用于计算的 datetime 对象。

没有时区信息的 datetime 对象是“原始”的;附加时区信息后,它就能感知时区了。使用内置的 zoneinfo 模块(Python 3.9+) 或 pytz 包来本地化日期时间,然后在不同区域之间进行转换,以便计算结果在不同区域保持正确。

对 datetime 对象调用 timestamp() 方法,可以获取自 Unix 纪元以来的秒数(以浮点数形式返回),例如 datetime.now().timestamp()。反过来,datetime.fromtimestamp(value) 可以根据 Unix 时间戳重建 datetime 对象。

两者都返回当前本地日期和时间,但 `datetime.now()` 接受一个可选的时区参数,而 `datetime.today()` 则不接受。对于需要感知时区的代码,建议使用 `datetime.now(tz)`,这样结果会包含正确的时区偏移量,而不是简单地使用时区偏移量。

是的。datetime 模块随附于 Python因此无需使用 pip 安装。使用“from datetime import datetime, date, time, timedelta”导入后,date、time、datetime、timedelta 和 tzinfo 类即可立即使用。

调用 isoformat() 方法可获取标准的 ISO 8601 字符串,例如“2018-06-29T08:15:27”。对于日期对象,它返回“YYYY-MM-DD”格式。与 strftime() 不同,isoformat() 不需要控制代码,而 strftime() 则需要根据指令构建自定义布局。

机器学习流程利用 datetime 和 timedelta 函数将原始时间戳转换为星期几、小时、月份和经过时间等特征。这些经过处理的日期特征有助于时间序列模型和人工智能预测系统检测季节性和周期性模式。

是的。GitHub Copilot 和智能 AI 助手可以根据简短的注释生成 strftime() 格式字符串、timedelta 计算和时区转换,还能解释晦涩难懂的指令。务必运行建议的代码,因为日期处理和偏移量很容易出错。

总结一下这篇文章: