gpt4 book ai didi

python 日期处理

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python 日期处理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

仅以此篇记录一下个人常用的 Python 处理日期的库与函数,主要涉及的类库有 Python 自带的 datetime, time 和 calendar,以及第三方的 dateutil。说到日期处理基本上要覆盖的概念有 date, time, datetime, timezone, calendar, 时间的比较与差值,解析与格式化显示等.

在 datetime 模块中类之间的继承关系如下:

object ├── date │ └── datetime ├── time ├── timedelta └── tzinfo └── timezone 。

我们着重体验一下前面粗体显示的 datetime, date, time, timedelta 对象, timezone 也不是不重要,有时候也可能只需要处理本地时间.

datetime, date, time 实例的创建 。

可以使用它们各自的构造函数,提供必要的参数来创建相应的实例,下面是它们的构造函数 。

?
1
2
3
4
5
6
7
8
datetime:
   def __new__( cls , year, month = None , day = None , hour = 0 , minute = 0 , second = 0 ,
         microsecond = 0 , tzinfo = None , * , fold = 0 )
date:
   def __new__( cls , year, month = None , day = None )
 
time:
   def __new__( cls , hour = 0 , minute = 0 , second = 0 , microsecond = 0 , tzinfo = None , * , fold = 0 )

比如 。

?
1
2
3
from datetime import datetime, date, time, timedelta
 
today = date( 2019 , 4 , 24 ) # 2019-04-24

获得当前日期或时间 。

?
1
2
3
4
5
6
7
8
9
date.today()  #2019-04-24
datetime.now()  # 2019-04-24 21:41:40.226300
 
datetime.today() # 2019-04-24 21:41:50.336293
datetime.today().date() #2019-04-24
datetime.today().time() #21:41:50.336303
 
datetime.now().date()
datetime.now().time()

从语义上应该调用 date.today() 和 datetime.now(),datetime.today() 只是 datetime 继承自 date 的函数.

time 没有 today() 或 now() 方法,所以只有通过 datetime.now() 来得到相应的 time, datetime 兼具 date 与 time 信息,所以总是可以经由 datetime 来获得相应的 date 和 time.

解析字符串获得实例 。

?
1
2
3
4
date.fromisoformat( '2019-04-24' )        # 2019-04-24
datetime.fromisoformat( '2019-04-24T13:12:23' ) # 2019-04-24 13:12:23
datetime.strptime( '04/24/2019' , '%m/%d/%Y' # 2019-04-24 00:00:00
time.fromisoformat( '12:12:24+06:00' )      #12:12:24+06:00

datetime, date 和 time 都有 fromisoformat() 方法,就是要了解它们各自的 ISO 表示格式。能指定格式来解析字符串只有 datetime 有 strptime() 方法,因为有了 datetime 也就有了相应的 date 与 time 。

date, datetime 与 time 相应的 ISO 格式如下 。

  1. date ISO format: YYYY-MM-DD
  2. datetime ISO format: YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]
  3. time ISO format: HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]

能自由解析字符串的就是 datetime.strptime(str, fmt),Python 借鉴了标准 C 的日期格式定义字符串,见 strftime() and strptime() Behavior. 后面的 strftime() 函数也要用到相同的格式定义法.

注:strftime() 和 strptime() 中的 f 和 p 分别对应着 format 和 parse 的首字母.

基于 Timestamp 来创建实例 。

Python 本身没有 Timestamp 这么一个类型,这里的 timestamp 是一个浮点数表示的 。

?
1
2
3
ts = datetime.today().timestamp()  # 1556161777.38553
date.fromtimestamp(ts)       # 2019-04-24
datetime.fromtimestamp(ts)     # 2019-04-24 22:09:37.385530

time 没有 fromtimestamp() 方法 。

格式化输出 。

date, datetime 和 time 都有 isoformat() 和 strftime(fmt) 函数,格式字符串请参考 strftime() and strptime() Behavior.

?
1
2
3
4
date.today().strftime( '%a %b %d, %Y' ) # Wed Apr 24, 2019
datetime.today().isoformat()      # 2019-04-24T22:21:38.747318
datetime.today().time().strftime( '%Y' ) # 1900
date.today().strftime( '%S' )      # 00

上面是几个例子,注意在 Python 中像 time 没有年月日信息时格式化时想要输出年份会得到不期望的值,但不会象 Java 中那样报错。比如下面的 Java 代码 。

?
1
2
3
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyy-MM-dd" );
LocalDate.now(). format (formatter); / / 2019 - 04 - 24
LocalTime.now(). format (formatter); / / Exception java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra

由于 LocalTime.now() 没有年月日信息,所以无法格式化为 yyyy-MM-dd.

时间, 日期的比较与 timedelta 。

  1. date, datetime, time 都定义有 __lt__, __le__, __ne__, __gt__, __ge__, __eq__ 函数,所以两个相同类型的实例之间是可以进行比较时间上的先后的。
  2. 其中的 date, datetime 还定义了 __sub__ 和 __rsub__ 函数,因此两个 date 或两个 datetime 实例进行相减会得到一个 timedelta 实例
  3. 另外, date, datetime 也定义了 __add__, __radd__ 函数,date 或 datetime 可以加减一个 timedelta 来得到一个新的实例

下面看几个简单的示例 。

?
1
2
3
4
5
6
7
8
9
10
d1 = datetime.today()              # 2019-04-24 23:00:31.672769
delta = timedelta(days = 2 , weeks = 1 , seconds = - 3 ) # 8 days, 23:59:57
d2 = d1 + delta                 # 2019-05-03 23:00:28.672769
d3 = d1 - delta                 # 2019-04-15 23:00:34.672769
 
d2 - d1                     # 8 days, 23:59:57
d2 > d1                     # True
d1 < d3                     # False
 
datetime.today().date() + delta)        # 2019-05-02

注意,不同类型间不能相减,比如用 date 减去一个 datetime 就不合法了。d1 + delta, d1 - delta 和 delta + d1 都没问题, 但是 delta - d1 就不行了.

timedelta 表示了两个时间的差值,用它来推算另一个实例的时候不带有日历信息,如果想要在日历上推演就得借助于 calendar.

不可忽略的 time 模块 。

前面讲到的是 datetime 模块中的 time 类型,Python 还自带了 time 模块,由 import time 引入。它提供了一些很实用的功能 。

  1. time 包含了完整的如上的 datetime 信息,并不像 datetime 中的 time 不含年月日信息
  2. locatime(), strptime(), gmtime(), asctime(), mktime() 用以构造 time 实例
  3. strftime() 可用来格式化输出
  4. time.time() 得到当前的 Unix 时间戳
  5. time.sleep(sec) 用来暂停当前线程若干秒

关于 calendar 和 dateutil 的内容有后续 。

以上就是python 日期处理的详细内容,更多关于python 日期处理的资料请关注我其它相关文章! 。

原文链接:https://yanbin.blog/python-date-libraries-usages/ 。

最后此篇关于python 日期处理的文章就讲到这里了,如果你想了解更多关于python 日期处理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com