首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >python手把手教你获取某月第一天和最后一天

python手把手教你获取某月第一天和最后一天

原创
作者头像
mariolu
修改2023-12-01 16:00:17
修改2023-12-01 16:00:17
4K0
举报

某月的最后天数有28,29,30,31不等。

python自带有很多跟时间计算的libraries。接下来介绍几种不同的方法来取得

1. datetime库

datetime库顾名思义包括date和time,time还包括是否有time zone的概念。

该module用于用于操作日期和时间的类。具体包括支持时间日期的算术操作,还有关于输出格式化和操作的高效属性提取。

用几个简单的示例来熟悉这个module,

1.1 获取当前日期时间:

代码语言:javascript
复制
import datetime

now = datetime.datetime.now()

print(now)

1.2 获取当前日期

代码语言:javascript
复制
import datetime

current_date = datetime.date.today()

print(current_date)

1.3 获取datetime可用方法属性

代码语言:javascript
复制
import datetime

print(dir(datetime))

在 datetime 模块的所有属性中,datetime 模块中最常用的类是:

  • datetime.datetime- 表示单个时间点,包括日期和时间。
  • datetime.date- 表示不带时间的日期(年、月和日)。
  • datetime.time- 表示不带日期的时间(小时、分钟、秒和微秒)。
  • datetime.timedelta- 表示持续时间,可用于对 DateTime 对象执行算术运算。

1.4 格式化输出

日期和时间的表示方式在不同的地方、组织等中可能有所不同

Python 有 两个方法strftime()和strptime()来处理这个问题。

1.4.1 strftime() 格式化时间串

以下例子解释了如何用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)

代码语言:javascript
复制
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

%%

%符合

%

1.4.2 strptime() 方法

该方法从给定的字符串(表示日期和时间)创建对象。

代码语言:javascript
复制
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)

二、使用datetime库计算某月最后一天

假设给定年和月份,这里用的计算逻辑方法是,下个月的1号减去这个月的1号就是这个月的实际天数。这里月份+1有可能溢出到下一年,因此对12月份需要做逻辑分类处理。如果月份==12,那么下一个月就是第二年的一月。以下是这个逻辑的实现代码,可用python2执行。

代码语言:javascript
复制
#!/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))

三. calendar日历库

Python 定义了一个内置模块日历,用于处理与日历相关的操作。下来来介绍这个日历module

3.1 Python 中的日历模块

calendar模块允许我们像程序一样输出日历,并提供与日历相关的其他有用功能。calendar 模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限扩展。默认情况下,这些日历将星期一作为一周的第一天,星期日作为最后一天(欧洲惯例)。

显示给定月份的 Python 日历

该代码使用 Python 的 模块打印指定年份 (yy) 和月份 (mm) 的日历。在本例中,它将打印 2023 年 12 月的日历。

代码语言:javascript
复制
import calendar 
yy = 2023
mm = 12
print(calendar.month(yy, mm)) 

运行后有如下输出:

还比如这个可以输出2023一整个年份的日历:

代码语言:javascript
复制
import calendar 
print ("The calendar of year 2018 is : ") 
print (calendar.calendar(2023)) 

运行后有如下输出:

四、使用calendar库计算某月最后一天

calendar库自带monthrange方法,monthrange方法返回两个值,第一个值是这个月的第一个周一是几号,第二个值是代表该月总共有几天。

代码语言:javascript
复制
#!/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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. datetime库
    • 1.1 获取当前日期时间:
    • 1.2 获取当前日期
    • 1.3 获取datetime可用方法属性
    • 1.4 格式化输出
      • 1.4.1 strftime() 格式化时间串
      • 1.4.2 strptime() 方法
  • 二、使用datetime库计算某月最后一天
  • 三. calendar日历库
    • 3.1 Python 中的日历模块
      • 显示给定月份的 Python 日历
  • 四、使用calendar库计算某月最后一天
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档