某月的最后天数有28,29,30,31不等。
python自带有很多跟时间计算的libraries。接下来介绍几种不同的方法来取得
datetime库顾名思义包括date和time,time还包括是否有time zone的概念。
该module用于用于操作日期和时间的类。具体包括支持时间日期的算术操作,还有关于输出格式化和操作的高效属性提取。
用几个简单的示例来熟悉这个module,
import datetime
now = datetime.datetime.now()
print(now)import datetime
current_date = datetime.date.today()
print(current_date)import datetime
print(dir(datetime))在 datetime 模块的所有属性中,datetime 模块中最常用的类是:
datetime.datetime- 表示单个时间点,包括日期和时间。datetime.date- 表示不带时间的日期(年、月和日)。datetime.time- 表示不带日期的时间(小时、分钟、秒和微秒)。datetime.timedelta- 表示持续时间,可用于对 DateTime 对象执行算术运算。日期和时间的表示方式在不同的地方、组织等中可能有所不同
Python 有 两个方法strftime()和strptime()来处理这个问题。
以下例子解释了如何用strftime来格式化时间。其中比如说这些常用的
YYYY = 4位数的年份 MM = 2位数的月份 (01=January, etc.) DD = 2位数的天 (01 through 31) hh = 2位数的小时 (00 through 23) (am/pm NOT allowed) mm = 2位数的分钟 (00 through 59) ss = 2位数的秒 (00 through 59) s = 小数点后的秒 TZD = 时区 (Z or +hh:mm or -hh:mm)
from datetime import datetime
# current date and time
now = datetime.now()
t = now.strftime("%H:%M:%S")
print("Time:", t)
s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)
s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)完整的见这个列表
Directive | Meaning | Example |
|---|---|---|
%a | 星期几 | Sun, Mon, ... |
%A | 星期几的全写 | Sunday, Monday, ... |
%w | 星期几的数字形式 | 0, 1, ..., 6 |
%d | 月的第几天,2位占位符 | 01, 02, ..., 31 |
%-d | 月的第几天,只取有效数字 | 1, 2, ..., 30 |
%b | 月份的缩写 | Jan, Feb, ..., Dec |
%B | 月份的全写 | January, February, ... |
%m | 月的数字形式,2位占位符 | 01, 02, ..., 12 |
%-m | 月的数字形式,只取有效数字 | 1, 2, ..., 12 |
%y | 年份,没有世纪,2位占位符 | 00, 01, ..., 99 |
%-y | 年份,没有世纪,只取有效数字 | 0, 1, ..., 99 |
%Y | 年份包含世纪 | 2013, 2019 etc. |
%H | 24小时制的小时数,2位占位符 | 00, 01, ..., 23 |
%-H | 24小时制的小时数,只取有效数字 | 0, 1, ..., 23 |
%I | 12小时制的小时数,2位占位符 | 01, 02, ..., 12 |
%-I | 12小时制的小时数,只取有效数字 | 1, 2, ... 12 |
%p | AM or PM. | AM, PM |
%M | 分钟,2位占位符 | 00, 01, ..., 59 |
%-M | 分钟,只取有效数字 | 0, 1, ..., 59 |
%S | 秒,2位占位符 | 00, 01, ..., 59 |
%-S | 秒,只取有效数字 | 0, 1, ..., 59 |
%f | 微妙,6位占位符 | 000000 - 999999 |
%z | UTC时区偏移量in the form +HHMM or -HHMM. | |
%Z | 时区名字 | |
%j | 年的第几天,3位占位符 | 001, 002, ..., 366 |
%-j | 年的第几天,只取有效数字 | 1, 2, ..., 366 |
%U | 年的第几周(周日是周的第一天). 第一周是0. | 00, 01, ..., 53 |
%W | 年的第几周(周一是周的第一天). 第一周是0 | 00, 01, ..., 53 |
%c | 适合本地时区的时间日期表达形式 | Mon Sep 30 07:06:05 2013 |
%x | 适合本地时区的日期表达形式 | 09/30/13 |
%X | 适合本地时区的时间表达形式 | 07:06:05 |
%% | %符合 | % |
该方法从给定的字符串(表示日期和时间)创建对象。
from datetime import datetime
date_string = "25 December, 2022"
print("date_string =", date_string)
# use strptime() to create date object
date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)假设给定年和月份,这里用的计算逻辑方法是,下个月的1号减去这个月的1号就是这个月的实际天数。这里月份+1有可能溢出到下一年,因此对12月份需要做逻辑分类处理。如果月份==12,那么下一个月就是第二年的一月。以下是这个逻辑的实现代码,可用python2执行。
#!/usr/bin/env python
import sys
import datetime
def main(argv, argc):
#d1是当前给定参数的这个月的第一天,d2是下一个月的第一天,两者相减就是天数,也就是这个月的最后一天
d1 =datetime.date(int(argv[1]), int(argv[2]), 1) - datetime.timedelta(days=1)
if argv[2]=='12':
d2 =datetime.date(int(argv[1])+1, int(1), 1) - datetime.timedelta(days=1)
else:
d2 =datetime.date(int(argv[1]), int(argv[2])+1, 1) - datetime.timedelta(days=1)
print((d2-d1).days)
if __name__ == '__main__':
if len(sys.argv)!=3:
print("Not 2 args provided!")
sys.exit()
main(sys.argv, len(sys.argv))
Python 定义了一个内置模块日历,用于处理与日历相关的操作。下来来介绍这个日历module
calendar模块允许我们像程序一样输出日历,并提供与日历相关的其他有用功能。calendar 模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限扩展。默认情况下,这些日历将星期一作为一周的第一天,星期日作为最后一天(欧洲惯例)。
该代码使用 Python 的 模块打印指定年份 (yy) 和月份 (mm) 的日历。在本例中,它将打印 2023 年 12 月的日历。
import calendar
yy = 2023
mm = 12
print(calendar.month(yy, mm)) 运行后有如下输出:

还比如这个可以输出2023一整个年份的日历:
import calendar
print ("The calendar of year 2018 is : ")
print (calendar.calendar(2023)) 运行后有如下输出:

calendar库自带monthrange方法,monthrange方法返回两个值,第一个值是这个月的第一个周一是几号,第二个值是代表该月总共有几天。
#!/usr/bin/env python
import sys
import calendar
def main(argv, argc):
#calendar库提供了monthrange直接获取该月份的最后一天,第2个参数就是最后一天,这里使用[1]提取
print(calendar.monthrange(int(argv[1]), int(argv[2]))[1])
if __name__ == '__main__':
if len(sys.argv)!=3:
print("Not 2 args provided!")
sys.exit()
main(sys.argv, len(sys.argv))
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。