广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python:如何用一行代码获取上个月是
  • 328
分享到

Python:如何用一行代码获取上个月是

上个月如何用代码 2023-01-30 22:01:38 328人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

现在转一篇志军100发于公众号 python之禅的文章: Python:如何用一行代码获取上个月是几月   抱歉我用了个有点标题党的标题,因为担心你错过了本文,但内容绝对干货,本文介绍的关于Python时间日期处理,日期时间处理在实际应用

现在转一篇志军100发于公众号 python之禅的文章:

Python:如何用一行代码获取上个月是几月

 

抱歉我用了个有点标题党的标题,因为担心你错过了本文,但内容绝对干货,本文介绍的关于Python时间日期处理,日期时间处理在实际应用场景中无处不在,所以这也成了编程语言中必不可少的模块,Python 也不例外。但是,你知道在Python中有多少个相关的模块吗?datetime、time、calendar、 dateutil、 pytz 等等。 你知道有多少种数据类型吗?date、time、datetime、tzinfo、timedelta 等等。

有天我遇到这样的需求,想获取当前月的前一个月是几月,假设本月是2018年1月,那么上个月就是2017年12月,大约要经过这么几个步骤

 >>> import datetime
# 1. 获取「今天」
>>> today = datetime.date.today()
# 2. 获取当前月的第一天
>>> first = today.replace(day=1)
# 3. 减一天,得到上个月的最后一天
>>> last_month = first - datetime.timedelta(days=1)
# 4. 格式化成指定形式
>>> print(last_month.strftime("%Y%m"))
201807
>>>

这是有多麻烦? 麻烦得你怀疑这是 Python 代码? 可能有人会说,用 datetime.replace 方法将 month-1 就好了,咋看起来没问题,实际上这是有 bug 的,month 的范围只能是 1-12

>>> d.replace(month=d.month-1)
datetime.datetime(2018, 7, 24, 11, 29, 28, 929830)

month-11 就报错了

>>> d.replace(month=d.month-11)
ValueError: month must be in 1..12

你还知道日期时间、时间戳、字符串之间的互相转换的那些 api 方法吗?是不是每次处理时间相关的操作时,总要去官方文档翻看一遍才能动手。你可以看看 time 模块和 datetime 模块中各种类型之间的互相转换,看着这些箭头是不是有密集恐惧症?

 

不管怎样,你终究还是要熟练这些模块和API操作的,记不住没关系,至少你都要手动敲几遍,下次遇到时要能做到翻看文档能快速定位到某个类某个方法是做什么用、怎么用。

但今天我要强烈安利给你的这个时间日期库:Arrow。它的灵感来自于 requests 库。将所有繁杂的东西全部隐藏于身后,留给你的是 for humans 接口。充分诠释了 keep it simple and stupid 这句话的含义。

这篇文章带你初步了解并掌握 Arrow 的使用方式。

安装

$ pip install arrow

使用

>>> a = arrow.now() # 当前本地时间
>>> a
<Arrow [2018-08-24T07:09:03.468562+08:00]>

>>> arrow.utcnow() # 当前utc时间
<Arrow [2018-08-23T23:11:50.147585+00:00]>

你可以认为 Arrow 对象是一个增强版的 datetime 对象

通过 Arrow 对象你可以获取 datetime 对象

>>> t = a.datetime
>>> type(t)
<class 'datetime.datetime'>
>>> t
datetime.datetime(2018, 8, 24, 7, 17, 14, 884750, tzinfo=tzlocal())

通过 Arrow 对象你可以得到时间戳

>>> a.timestamp
1535066234

获取 arrow 对象的年、月、日、时、分、秒

>>> a.year
2018
>>> a.month
8
>>> a.day
24
>>> a.hour
7

获取 arrow 对象的时间和日期

>>> a.date()
datetime.date(2018, 8, 24)
>>> a.time()
datetime.time(7, 9, 3, 468562)

注意,获取时间和日期是用方法,而获取 datetime 和 timestamp 是两个属性

接下来介绍一些 arrow 有意思的方法

shift

shift 有点像游标卡尺,可以左右两边进行加减移位操作,加减的对象可以是年月日时分秒和星期。再回到文章开始地方,想获取当前月的前一个月,你可以这样写:

>>> a.shift(months=-1)
<Arrow [2018-07-24T07:09:03.468562+08:00]>

>>> a.shift(months=-1).fORMat("YYYYMM")
'201807'
>>>

指定参数 months = -1 就可以了。往后一个月就是 month=+1, 加号可以省略。这样你可以基于一个 arrow 时间对象进行任意的往前加或者往后减。 注意 month 后面有个s, year 同理。 以下是一些例子。

加一个月

>>> a.shift(months=1)
<Arrow [2018-09-24T07:09:03.468562+08:00]>

减一个月

>>> a.shift(months=-1)
<Arrow [2018-07-24T07:09:03.468562+08:00]>

减两年

>>> a.shift(years=-2)
<Arrow [2016-08-24T07:09:03.468562+08:00]>
>>>

加一个小时

>>> a.shift(hours=1)
<Arrow [2018-08-24T08:09:03.468562+08:00]>

还可以按周进行加减

>>> a.shift(weeks=1)
<Arrow [2018-08-31T07:09:03.468562+08:00]>

如果你要明确指定修改成哪年或者哪月,那么使用 replace 方法即可,repalce 在 datetime 对象中也有该方法,两者的使用方式是一样的。

humanize

humanize 方法是相对于当前时刻表示为“多久以前”的一种可读行字符串形式,默认是英文格式,指定 locale 可显示相应的语言格式。

>>> a.humanize()
'6 hours aGo'
>>> a.humanize(locale='zh')
'6小时前'

format

format 是格式化工具,可以根据指定的格式将 arrow 对象转换成字符串格式,格式Token请参考下图

>>> a.format()
'2018-08-24 07:09:03+08:00'
>>> a.format("YYYY-MM-DD HH:mm:ss")
'2018-08-24 07:09:03'

to

to 可以将一个本地时区转换成其它任意时区,例如:

>>> arrow.now()
<Arrow [2018-08-24T16:58:50.990657+08:00]>
>>> arrow.now().to("utc")
<Arrow [2018-08-24T08:59:04.316289+00:00]>
>>> arrow.now().to("utc").to("local")
<Arrow [2018-08-24T16:59:15.800847+08:00]>
>>> arrow.now().to("America/New_York")
<Arrow [2018-08-24T04:59:34.037182-04:00]>

构建 Arrow 对象

前面介绍了 arrow 可以转换成datetime、str、date、time、timestamp,那么如何构建 Arrow 对象呢?除了使用 now()、utcnow() 方法之后,你还可以使用 get 工厂方法,或者使用 Arrow 构造方法直接指定年月日时分秒

>>> arrow.Arrow(2018, 8, 24, 12, 30, 45)
<Arrow [2018-08-24T12:30:45+00:00]>
>>> arrow.Arrow(2018, 8, 24, 12, 30, 45, tzinfo='utc')
<Arrow [2018-08-24T12:30:45+00:00]>
>>> arrow.Arrow(2018, 8, 24, 12, 30, 45, tzinfo='local')
<Arrow [2018-08-24T12:30:45+08:00]>

get

第二种方式是用get方法来创建 arrow 对象,get 方法”非常灵活”,直接看例子,跟着敲

# 不带参数,等价与 utcnow()
>>> arrow.get()
<Arrow [2018-08-24T07:11:50.528742+00:00]>

# 接受时间戳参数
>>> arrow.get(1535113845)

# 接受一个datetime对象
>>> arrow.get(datetime(2018,8,24))
<Arrow [2018-08-24T00:00:00+00:00]>

# 接收一个date对象
>>> from datetime import date
>>> arrow.get(date(2018,7,24))
<Arrow [2018-07-24T00:00:00+00:00]>

# 接收日期格式的字符串
>>> arrow.get("2018-08-11 12:30:56")
<Arrow [2018-08-11T12:30:56+00:00]>

# 接收日期字符串,并指定格式
>>> arrow.get("18-08-11 12:30:56", "YY-MM-DD HH:mm:ss")
<Arrow [2018-08-11T12:30:56+00:00]>

Arrow 的不足

关于 get 方法,看似强大,使用起来灵活,感觉什么参数都能接受,但是也带来了一些问题,甚至是 bug。比如

>>> arrow.get("2018-7-11")
<Arrow [2018-01-01T00:00:00+00:00]>

期望的值应该是 2018-07-11, 但是它并没有提示错误,而正确的做法是要指定格式,因为你传的字符串不是标准的日期格式。

>>> arrow.get("2018-7-11", "YYYY-M-DD")
<Arrow [2018-07-11T00:00:00+00:00]>

想通过一个方法来兼容n种情况是极度困难的,内部实现也会非常复杂,作为用户使用起来必然也很混乱。

 

--结束END--

本文标题: Python:如何用一行代码获取上个月是

本文链接: https://www.lsjlt.com/news/179221.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python:如何用一行代码获取上个月是
    现在转一篇志军100发于公众号 Python之禅的文章: Python:如何用一行代码获取上个月是几月   抱歉我用了个有点标题党的标题,因为担心你错过了本文,但内容绝对干货,本文介绍的关于Python时间日期处理,日期时间处理在实际应用...
    99+
    2023-01-30
    上个月 如何用 代码
  • shell下如何获取上一个月
    这篇文章主要介绍了shell下如何获取上一个月,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:#!/bin/bash#一月前historyTime=$(date&nb...
    99+
    2023-06-09
  • 如何在MySQL中获取上个月的最后一天?
    借助以下 MySQL 查询,我们可以获得上个月的最后一天 -mysql> SELECT LAST_DAY(now() - INTERVAL 1 MONTH) AS 'LAST DAY OF PREVIOUS MONTH'...
    99+
    2023-10-22
  • 如何从Github上获取代码并运行
    随着开源文化的兴起,越来越多的程序被托管在Github上,对于一些对编程有兴趣或者需要使用这些程序的人来说,学会如何在Github上运行程序是非常必要的一项技能。下面我们将介绍如何跑Github上的程序。一、什么是Github?Github...
    99+
    2023-10-22
  • 代码行号如何利用Java获取
    这篇文章将为大家详细讲解有关代码行号如何利用Java获取,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体实现代码:package leo.demo.training;public clas...
    99+
    2023-05-31
    java ava
  • Python如何17行代码画一个爱心
    🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0&...
    99+
    2023-10-18
    python 开发语言 笔记 经验分享 virtualenv
  • Java如何利用LocalDate获取某个月的第一天与最后一天日期
    目录问题描述:使用TemporalAdjusters方法实现使用getDayOfMonth()方法实现补充:使用LocalDateTime也可以实现相关功能java获取指定日期当月和...
    99+
    2022-11-13
  • 如何用Python代码做一个换脸程序
    如何用Python代码做一个换脸程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。简介在这篇文章中我将介绍如何写一个简短(200行)的 Python 脚本,来自动地将一幅图片的...
    99+
    2023-06-17
  • python如何使用一行代码定义List
    这篇文章主要为大家展示了“python如何使用一行代码定义List”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python如何使用一行代码定义List”这篇文章吧。一行代码定义List定义某种...
    99+
    2023-06-27
  • 如何利用Python获取文本中的电话号码实例代码
    目录前言打开文本正则表达式遍历电话最后拼接输出完整的代码↓使用方法补充:使用Python提取电话号码和E-mail地址结语前言 此编制利用Python的简单编程,实现获取t...
    99+
    2022-11-11
  • 如何用Python代码做一个英文解析器
    如何用Python代码做一个英文解析器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义...
    99+
    2023-06-17
  • 一文详解如何用GPU来运行Python代码
    目录简介安装相关工具测试与驱动安装测试Python代码打印ID查看时间简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐。 还...
    99+
    2023-02-06
    用GPU运行Python代码 GPU运行Python代码 GPU Python
  • 在获取数据作为输出时,如何在同一列上使用多个条件?
    以下是我们编写查询的方法,该查询仅返回与同一列上的多个条件匹配的记录通过使用“OR”逻辑运算符众所周知,MySQL 的“OR”运算符比较两个表达式,如果其中一个表达式为 TRUE,则返回 TRUE。以下示例演示了如何对同一列上的多个条件使用...
    99+
    2023-10-22
  • Python封装——如何把python代码打包成一个可执行的.exe文件,Pyinstaller
    目录 Pyinstaller是啥入门案例:Hello World 封装1.hello world封装2.封装步骤1.新建文件夹放入hello.py文件2.按住shift点鼠标右键选择3.输入4...
    99+
    2023-09-03
    python 开发语言 机器学习
  • 如何使用Vue代码实现一个上下滚动加载组件
    本篇内容主要讲解“如何使用Vue代码实现一个上下滚动加载组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Vue代码实现一个上下滚动加载组件”吧!组件代码// scrollLo...
    99+
    2023-07-04
  • python简单的病毒编程代码,如何用python写一个病毒
    大家好,本文将围绕python简单的病毒编程代码展开说明,如何用python做恶搞病毒是一个很多人都想弄明白的事情,想搞清楚如何用python写一个病毒需要先了解以下几个事情。 1、Python能不能写病毒 国家计算机病毒应急处理中心通...
    99+
    2023-09-08
    小发猫
  • 如何使用Python代码制作一个视频倒放神器
    这篇文章主要介绍了如何使用Python代码制作一个视频倒放神器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。导语正常的视频如下倒放视频如下效果很赞吧,等你学会了这个,你才会发...
    99+
    2023-06-29
  • 如何用5行python代码爬取新闻网最新资讯
    这期内容当中小编将会给大家带来有关如何用5行python代码爬取新闻网最新资讯,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。大家都知道python语言的强大,以强大的胶水语言著称,其简洁性,实在是令其它语...
    99+
    2023-06-02
  • 一文详解如何用GPU来运行Python代码/基于Python自制一个文件解压缩小工具
    前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下多核的快乐,感兴趣的小伙伴快跟随小编一起了解一下吧 简介 前几天捣鼓了一下Ubuntu,正是想用一下我旧电脑上的N卡,可以用GPU来跑代码,体验一下...
    99+
    2023-10-02
    python 数学建模 开发语言 程序人生 职场和发展
  • 如何利用一行python代码实现灰度图抠图
    这篇“如何利用一行python代码实现灰度图抠图”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何利用一行python代码实...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作