时间模块datetime

发布时间 2023-07-23 15:36:37作者: Allen_Hao
 1 '''
 2 datetime 模块是 Python 标准库中用于处理日期和时间的模块。
 3 
 4 1. 详解:
 5 datetime 模块提供了多个类来处理日期和时间,包括 date、time、datetime 和 timedelta 等。
 6     1. date 类表示一个具体的日期(年、月、日)。
 7     2. time 类表示一个具体的时间(时、分、秒、微秒)。
 8     3. datetime 类表示一个具体的日期和时间(年、月、日、时、分、秒、微秒)。
 9     4. timedelta 类表示时间间隔,可以用于计算两个日期或时间之间的差异。
10 datetime 模块还提供了一些函数和常量,如 datetime.now()、datetime.strptime() 和 datetime.strftime() 等,用于获取当前时间、将字符串转换为日期时间对象以及将日期时间对象格式化为字符串等操作。
11 
12 2. 最佳实践
13     1. 使用 datetime 类型存储和操作日期时间数据,而不是字符串。这样可以更方便地进行日期时间的计算和比较。
14     2. 在涉及时区的情况下,建议使用第三方库(如 pytz)来处理时区问题,而不是仅依赖 datetime 模块。
15     3. 使用 datetime.strftime() 函数将日期时间对象格式化为字符串时,应该使用合适的格式化字符串。可以参考 Python 官方文档中的 strftime 格式代码。
16     4. 当需要处理时间差异时,使用 timedelta 类来进行日期时间的加减操作。
17 
18 3. 在使用 datetime 模块时,需要注意以下一些常见的坑点:
19     1. 月份和星期的表示:在 datetime 模块中,月份和星期的表示是以 1 开始的,而不是以 0 开始的。即 1 表示一月或星期一,2 表示二月或星期二,依此类推。
20     2. 日期时间对象的不可变性:datetime 对象是不可变的,即不能直接修改其中的年、月、日、时、分、秒等属性。如果需要修改日期时间对象的某个部分,可以使用相应的方法(如 replace() 方法)返回一个新的日期时间对象。
21     3. 时间的计算和比较:在计算时间差或者比较两个时间大小时,应该使用 timedelta 类来处理,而不是直接减法或比较运算符。
22 
23 4. 语法:
24     1. datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0)
25         创建一个表示日期时间的对象。
26         参数 year、month、day 是必需的,表示年、月、日。
27         参数 hour、minute、second、microsecond 是可选的,默认为 0,表示时、分、秒、微秒。
28 
29     2. datetime.date(year, month, day)
30         创建一个表示日期的对象。
31         参数 year、month、day 是必需的,表示年、月、日。
32     
33     3. datetime.time(hour=0, minute=0, second=0, microsecond=0)
34         创建一个表示时间的对象。
35         参数 hour、minute、second、microsecond 是可选的,默认为 0,表示时、分、秒、微秒。
36 
37     4. datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
38         创建一个表示时间间隔的对象。
39         可以指定不同的参数来定义时间间隔,如天数(days)、秒数(seconds)、微秒数(microseconds)、毫秒数(milliseconds)、分钟数(minutes)、小时数(hours)和周数(weeks)。
40 
41     5. datetime.datetime.now(tz=None)
42         返回当前本地日期时间。
43         可选参数 tz 是一个时区对象,用于获取特定时区的当前日期时间。
44         
45     6. datetime.datetime.strptime(date_string, format)
46         将字符串解析为日期时间对象。
47         参数 date_string 是待解析的日期时间字符串,参数 format 是日期时间字符串的格式。
48 
49     7. datetime.datetime.strftime(format)
50         将日期时间对象格式化为字符串。
51         参数 format 是格式化字符串,用于指定输出的日期时间格式。
52 
53     8. datetime.datetime.fromtimestamp(timestamp, tz=None)
54         将 POSIX 时间戳转换为日期时间对象。
55         参数 timestamp 是一个表示时间的浮点数,表示自 1970 年 1 月 1 日以来经过的秒数。
56 '''
57 
58 import datetime
59 
60 # 获取当前日期时间(含毫秒)
61 now = datetime.datetime.now()
62 print("Current datetime:", now)  # Current datetime: 2023-07-23 11:30:11.814882
63 
64 # 创建一个特定的日期时间对象
65 dt = datetime.datetime(2022, 1, 1, 12, 0, 0)
66 print("Specific datetime:", dt)  # Specific datetime: 2022-01-01 12:00:00
67 
68 # 格式化日期时间对象为字符串
69 formatted = dt.strftime("%Y-%m-%d %H:%M:%S")
70 print("Formatted datetime:", formatted)  # Formatted datetime: 2022-01-01 12:00:00
71 
72 # 将字符串解析为日期时间对象
73 # parsed = datetime.datetime.strptime("2023-07-23 11:30:00", "%Y-%m-%d %H:%M:%S")
74 parsed = datetime.datetime.strptime("2023-07-24 11:30:00", "%Y-%m-%d %H:%M:%S")
75 print("Parsed datetime:", parsed)  # Parsed datetime: 2023-07-23 11:30:00
76 
77 # 计算时间差
78 diff = parsed - now
79 print("Time difference:", diff)  # Time difference: -1 day, 23:59:48.185118  | Time difference: 23:57:45.012680
80 
81 # 修改日期时间对象的某个部分,要全改
82 modified = dt.replace(year=2024, hour=13)
83 print("Modified datetime:", modified)  # Modified datetime: 2024-01-01 13:00:00