📜  time py - Python (1)

📅  最后修改于: 2023-12-03 15:35:20.083000             🧑  作者: Mango

Introduction to Time in Python

时间是计算机编程中重要的一个概念,Python 提供了丰富的时间处理模块,我们可以使用它们来实现时间相关的功能。这里将介绍 Python 的时间模块和如何在 Python 中使用时间。

时间模块

Python 有多个时间模块,每个模块都提供了一组不同的时间函数。以下是 Python 中常用的时间模块:

  • time: 用于处理时间的基本功能,如获取当前时间、时间戳转换等。
  • datetime: 用于处理日期和时间的高级功能,比如日期算术、日期计算等。
  • calendar: 用于处理日历的功能,如构建万年历等。
  • dateutil: 用于处理复杂日期和时间场景的工具集,比如时区、世界时间等。

在使用任何时间模块之前,需要先导入该模块。

import time
import datetime
import calendar
from dateutil import tz, parser
time 模块

time 模块主要提供了以下功能:

  1. 获取当前时间,时间戳和 UTC 时间。
  2. 时间戳和时间字符串之间的转换。
  3. 时间计算和格式化等。
获取当前时间

可以使用 time 模块中的 time() 函数来获取当前的时间戳。

import time

current_time = time.time()
print(current_time)

输出结果:

1632406689.6410403

可以使用 localtime() 函数来获取当前的本地时间,返回类型为 struct_time。

import time

local_time = time.localtime()
print(local_time)

输出结果:

time.struct_time(tm_year=2021, tm_mon=9, tm_mday=23, tm_hour=16, tm_min=31, tm_sec=29, tm_wday=3, tm_yday=266, tm_isdst=0)
时间戳和时间字符串之间的转换

使用 time 模块中的 localtime() 函数可以将时间戳转换为本地时间,再使用 strftime() 函数将时间格式化成字符串。

import time

current_time = time.time()
local_time = time.localtime(current_time)
time_str = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print(time_str)

输出结果:

2021-09-23 16:31:29

可以使用 strptime() 函数将时间字符串转换为时间戳。

import time

time_str = '2021-09-23 16:31:29'
time_tuple = time.strptime(time_str, '%Y-%m-%d %H:%M:%S')
time_stamp = time.mktime(time_tuple)
print(time_stamp)

输出结果:

1632406289.0
时间计算和格式化

使用 time 模块中的 strftime() 函数可以将时间格式化成指定的字符串格式。

import time

local_time = time.localtime()
time_str = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print(time_str)

输出结果:

2021-09-23 16:31:29

可以使用 mktime() 函数将 struct_time 转换为时间戳。

import time

local_time = time.localtime()
time_stamp = time.mktime(local_time)
print(time_stamp)

输出结果:

1632406289.0
datetime 模块

datetime 模块主要提供了以下功能:

  1. 获取当前日期和时间,日期时间计算等。
  2. 将日期和时间从字符串中提取出来。
  3. 将日期时间格式化为字符串。
获取当前日期和时间

可以使用 date 类和 time 类来获取当前的日期和时间。

import datetime

current_date = datetime.date.today()
current_time = datetime.datetime.now().time()

print("Current date:", current_date)
print("Current time:", current_time)

输出结果:

Current date: 2021-09-23
Current time: 16:31:29.942676
将日期和时间从字符串中提取出来

可以使用 strptime() 函数将日期和时间从字符串中提取出来。

import datetime

time_str = '2021-09-23 16:31:29'
time_tuple = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')

print(time_tuple.date())
print(time_tuple.time())

输出结果:

2021-09-23
16:31:29
将日期时间格式化为字符串

可以使用 strftime() 函数将日期时间格式化为指定的字符串格式。

import datetime

current_time = datetime.datetime.now()
time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")

print(time_str)

输出结果:

2021-09-23 16:31:29
calendar 模块

calendar 模块主要提供了以下功能:

  1. 构建万年历。
  2. 处理闰年和闰月。
  3. 计算某一天是星期几。
  4. 处理日期范围。
构建万年历

可以使用 calendar 模块中的 calendar() 函数构建一个万年历。

import calendar

cal = calendar.calendar(2021)

print(cal)

输出结果:

                                  2021
      January                   February                   March
Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su
             1  2  3         1  2  3  4  5  6  7         1  2  3  4  5  6  7
 4  5  6  7  8  9 10         8  9 10 11 12 13 14         8  9 10 11 12 13 14
11 12 13 14 15 16 17        15 16 17 18 19 20 21        15 16 17 18 19 20 21
18 19 20 21 22 23 24        22 23 24 25 26 27 28        22 23 24 25 26 27 28
25 26 27 28 29 30 31                                        29 30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su
          1  2  3  4                        1  2            1  2  3  4  5  6
 5  6  7  8  9 10 11         3  4  5  6  7  8  9         7  8  9 10 11 12 13
12 13 14 15 16 17 18        10 11 12 13 14 15 16        14 15 16 17 18 19 20
19 20 21 22 23 24 25        17 18 19 20 21 22 23        21 22 23 24 25 26 27
26 27 28 29 30                                        28 29

        July                     August                  September
Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su
          1  2  3  4                           1               1  2  3  4  5
 5  6  7  8  9 10 11         2  3  4  5  6  7  8         6  7  8  9 10 11 12
12 13 14 15 16 17 18         9 10 11 12 13 14 15        13 14 15 16 17 18 19
19 20 21 22 23 24 25        16 17 18 19 20 21 22        20 21 22 23 24 25 26
26 27 28 29 30 31           23 24 25 26 27 28 29        27 28 29 30
                            30 31

      October                   November                  December
Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su        Mo Tu We Th Fr Sa Su
             1  2  3         1  2  3  4  5  6  7               1  2  3  4  5
 4  5  6  7  8  9 10         8  9 10 11 12 13 14         6  7  8  9 10 11 12
11 12 13 14 15 16 17        15 16 17 18 19 20 21        13 14 15 16 17 18 19
18 19 20 21 22 23 24        22 23 24 25 26 27 28        20 21 22 23 24 25 26
25 26 27 28 29 30 31        29 30                       27 28 29 30 31
处理闰年和闰月

可以使用 isleap() 函数判断某一年是否为闰年。

import calendar

is_leap = calendar.isleap(2024)

print(is_leap)

输出结果:

True

可以使用 monthrange() 函数获取某一月份的天数和第一天的星期几。

import calendar

month_range = calendar.monthrange(2021, 9)

print(month_range)

输出结果:

(2, 30)
计算某一天是星期几

可以使用 weekday() 函数获取某一天是星期几。

import calendar

weekday = calendar.weekday(2021, 9, 23)

print(weekday)

输出结果:

3
处理日期范围

可以使用 monthcalendar() 函数获取某一月份中所有日期和星期几。

import calendar

month_calendar = calendar.monthcalendar(2021, 9)

print(month_calendar)

输出结果:

[[0, 0, 0, 0, 0, 0, 1], 
 [2, 3, 4, 5, 6, 7, 8], 
 [9, 10, 11, 12, 13, 14, 15], 
 [16, 17, 18, 19, 20, 21, 22], 
 [23, 24, 25, 26, 27, 28, 29], 
 [30, 0, 0, 0, 0, 0, 0]]
dateutil 模块

dateutil 模块主要提供了以下功能:

  1. 处理复杂的日期时间字符串。
  2. 支持时区、夏令时等功能。
  3. 支持世界时间。
处理复杂的日期时间字符串

可以使用 parser.parse() 函数来处理复杂的日期时间字符串,例如:

from dateutil import parser

date_str = "October 30, 2021 15:30:00"
date_time = parser.parse(date_str)

print(date_time)

输出结果:

2021-10-30 15:30:00
支持时区、夏令时等功能

可以使用 tz.utc 表示协调世界时 (UTC),也可以使用 datetime.tzinfo 表示自定义的时区信息。

from datetime import datetime, timedelta, timezone

# 获取当前时间
now = datetime.now()

# 设置时区
tz_info = timezone(timedelta(hours=8))

# 更新时区信息
now = now.replace(tzinfo=tz_info)

# 获取当前时间在 UTC 时间的时间戳
utc_now = now.astimezone(tz.utc)
timestamp = utc_now.timestamp()

print(now)
print(utc_now)
print(timestamp)

输出结果:

2021-09-23 16:31:29.341774+08:00
2021-09-23 08:31:29.341774+00:00
1632395489.341774
支持世界时间

可以使用 tz.gettz() 函数支持世界时间。

from datetime import datetime
from dateutil import tz

# 世界时间
world_time = datetime(2021, 9, 23, 8, 0, tzinfo=tz.gettz('UTC'))

# 本地时间
local_time = world_time.astimezone(tz.tzlocal())

print(world_time)
print(local_time)

输出结果:

2021-09-23 08:00:00+00:00
2021-09-23 16:00:00+08:00
总结

这篇文章介绍了 Python 中的时间模块,包括 time、datetime、calendar 和 dateutil 模块。time 模块提供了基本的时间处理功能,datetime 模块提供了高级的日期时间处理功能,calendar 模块提供了日历处理功能,dateutil 模块提供了时区、夏令时等高级功能,可以根据需要选择合适的模块来处理时间和日期。