当前位置:   article > 正文

Day19.python时间和日期

"dates.strftime(\"%j\")"

Python时间和日期

datetime模块专门用于时间和日期的处理

常用的功能有以下几个:

datetime.now()  &  datetime.today()

  1.  
  2.  
  3.  import datetime
  4.  print(datetime.datetime.now())
  5.  
  6.  # datetime.today()
  7.  #2020-09-21 23:13:05.245157
  8.  print(datetime.datetime.today())
  9.  #2020-09-21 23:13:57.062886
  10.  

datetime.strptime()

  1.  
  2.  print(datetime.datetime.strptime('2020/08/09',format('%Y/%m/%d')))
  3.  #2020-08-09 00:00:00
  4.  print(datetime.datetime.strptime('20-08-09',format('%y-%m-%d')))
  5.  #2020-08-09 00:00:00
  6.  

datetime.strftime()

接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。

  1.  
  2.  dt = datetime.datetime.now()  
  3.  print("======================")
  4.  print('时间:(%Y-%m-%d %H:%M:%S %f): ',dt.strftime( '%Y-%m-%d %H:%M:%S %f' ) )
  5.  print('时间:(%Y-%m-%d %H:%M:%S %p): ' , dt.strftime( '%y-%m-%d %I:%M:%S %p' ) )
  6.  print('星期缩写%%a: %s '  % dt.strftime( '%a' ))  
  7.  print('星期全拼%%A: %s '  % dt.strftime( '%A' ))  
  8.  print('月份缩写%%b: %s '  % dt.strftime( '%b' ) )
  9.  print('月份全批%%B: %s '  % dt.strftime( '%B' ))  
  10.  print('日期时间%%c: %s '  % dt.strftime( '%c' ) )
  11.  print('今天是这周的第%s天 '  % dt.strftime( '%w' ) )
  12.  print( '今天是今年的第%s天 '  % dt.strftime( '%j' ))  
  13.  print('今周是今年的第%s周 '  % dt.strftime( '%U' ) )
  14.  print('今天是当月的第%s天 '  % dt.strftime( '%d' ))
  15.  
  16.  '''
  17.  ======================
  18.  时间:(%Y-%m-%d %H:%M:%S %f): 2020-09-21 23:30:51 573645
  19.  时间:(%Y-%m-%d %H:%M:%S %p): 20-09-21 11:30:51 PM
  20.  星期缩写%a: Mon
  21.  星期全拼%A: Monday
  22.  月份缩写%b: Sep
  23.  月份全批%B: September
  24.  日期时间%c: Mon Sep 21 23:30:51 2020
  25.  今天是这周的第1天
  26.  今天是今年的第265天
  27.  今周是今年的第38周
  28.  今天是当月的第21天
  29.  '''

时间日期的应用场景

1.简介

在编写代码时,往往涉及时间、日期、时间戳的相互转换。

2.示例

  1.  # 引入模块
  2.  import time, datetime
2.1 str类型的日期转换为时间戳
  1.  # 字符类型的时间
  2.  
  3.  testStr = '2020-09-21 23:26:33'
  4.  
  5.  # 转为 时间数组
  6.  timeArray = time.strptime(testStr, "%Y-%m-%d %H:%M:%S")
  7.  print(timeArray)
  8.  
  9.  # timeArray可以调用tm_year等
  10.  print(timeArray.tm_year)  # 2020
  11.  
  12.  # 转为时间戳
  13.  timeStamp = int(time.mktime(timeArray))
  14.  print(timeStamp)  # 1600701993
  15.  
  16.  # 结果如下
  17.  time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=26, tm_sec=33, tm_wday=0, tm_yday=265, tm_isdst=-1)
  18.  2020
  19.  1600701993
2.2 更改str类型日期的显示格式
  1.  testStr1 = "2020-09-21 23:40:00"
  2.  # 转为数组
  3.  timeArray = time.strptime(testStr1, "%Y-%m-%d %H:%M:%S")
  4.  # 转为其它显示格式
  5.  otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
  6.  print (otherStyleTime)
  7.  
  8.  tss3 = "2020/09/21 23:40:00"
  9.  timeArray = time.strptime(tss3, "%Y/%m/%d %H:%M:%S")
  10.  otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
  11.  print (otherStyleTime)
  12.  
  13.  
  14.  """
  15.  -----------------------
  16.  2020/09/21 23:40:00
  17.  2020-09-21 23:40:00
  18.  ======================
  19.  
  20.  """
2.3 时间戳转换为指定格式的日期
  1.  # 使用time
  2.  timeStamp = 1600701993
  3.  timeArray = time.localtime(timeStamp)
  4.  otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
  5.  print(otherStyleTime)  # 2020--09--21 23:26:33
  6.  # 使用datetime
  7.  timeStamp = 1600101993
  8.  dateArray = datetime.datetime.fromtimestamp(timeStamp)
  9.  otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
  10.  print(otherStyleTime)  # 2020--09--15 00:46:33
  11.  # 使用datetime,指定utc时间,相差8小时
  12.  timeStamp = 1600201993
  13.  dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
  14.  otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
  15.  print(otherStyleTime)  # 2020--09--15 20:33:13
  16.  
2.4 获取当前时间并且用指定格式显示
  1.  print("+++++++++++++++++++++++++++++++++++++++++++")
  2.  # time获取当前时间戳
  3.  now = int(time.time())     # 1533952277
  4.  timeArray = time.localtime(now)
  5.  print (timeArray)
  6.  otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
  7.  print (otherStyleTime)
  8.  
  9.  # 结果如下
  10.  """
  11.  time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=45, tm_sec=53, tm_wday=0, tm_yday=265, tm_isdst=0)
  12.  2020--09--21 23:45:53
  13.  
  14.  """
  15.  
  16.  
  17.  # datetime获取当前时间,数组格式
  18.  now = datetime.datetime.now()
  19.  print (now)
  20.  otherStyleTime = now.strftime("%Y--%m--%d %H:%M:%S")
  21.  print (otherStyleTime)
  22.  
  23.  # 结果如下:
  24.  
  25.  """
  26.  2020-09-21 23:45:53.543487
  27.  2020--09--21 23:45:53
  28.  """

日期函数 time模块函数

这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢?

表示日期时间常用三种形式:

  1. 秒为单位的浮点数

  2. struct_time 元组

  3. 时间字符串

  1.  
  2.  import time;  # 引入time模块
  3.  ticks = time.time()
  4.  print ("当前时间戳为:", ticks)
  5.  
  6.  当前时间戳为: 1600704429.9781017
  7.  
  8.  
秒为单位的浮点数 转换为 时间元组
  1.  
  2.  tm_struct = time.localtime(ticks)
  3.  print(tm_struct)
  4.  
  5.  time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=0, tm_min=8, tm_sec=2, tm_wday=1, tm_yday=266, tm_isdst=0)
  6.  
  7.  

有时我们需要得到 格林威治时间,那么可以用time.gmtime() 函数

  1.  
  2.  #格林威治时间
  3.  print(time.gmtime(ticks))
  4.  
  5.  
  6.  time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=16, tm_min=9, tm_sec=18, tm_wday=0, tm_yday=265, tm_isdst=0)
  7.  
  8.  
时间元组转换为秒为单位的浮点数
  1.  
  2.  print(time.mktime(tm_struct))
  3.  
  4.  1600704621.0
  5.  
时间元组转换为时间字符串

转换方法有很多,最简单的是 asctime():

  1.  
  2.  time_str = time.asctime( tm_struct )
  3.  print(time_str)
  4.  
  5.  """
  6.  Tue Sep 22 00:12:14 2020
  7.  """
  8.  

如果要精确控制格式,我们可以使用 strftime():

  1.  
  2.  
  3.  tm_1=time.strftime("%Y-%m-%d %H:%M:%S", tm_struct)
  4.  tm_2=time.strftime("%a %b %d %H:%M:%S %Y", tm_struct)
  5.  print(tm_1)
  6.  print(tm_2)
  7.  
  8.  """
  9.  2020-09-22 00:14:13
  10.  Tue Sep 22 00:14:13 2020
  11.  """
  12.  
时间字符串 转换为 时间元组

函数 time.strptime() 可以完成这个转换,下面是个例子

  1.  
  2.  tm2_struct = time.strptime('2020-09-22 01:34:50', "%Y-%m-%d %H:%M:%S")
  3.  print(tm2_struct)
  4.  
  5.  """
  6.  time.struct_time(tm_year=2020, tm_mon=9, tm_mday=22, tm_hour=1, tm_min=34, tm_sec=50, tm_wday=1, tm_yday=266, tm_isdst=-1)
  7.  """
  8.  
  9.  
  10.  
秒为单位的浮点数 转换为 时间字符串

time.ctime() 类似于 time.asctime(), 请看下面的例子:

  1.  
  2.  tm_3=time.ctime(ticks)
  3.  print(tm_3)
  4.  
  5.  """
  6.  Tue Sep 22 00:17:54 2020
  7.  
  8.  """
  9.  #如果想精确控制输出的字符串,我没查到有现成的函数。估计只能先转成元组,然后在格式化成字符串。
  10.  #小编写了个转换函数:
  11.  
  12.  def time2str(ticks, fmt='%a %b %d %H:%M:%S %Y'):
  13.      tm = time.localtime(ticks)
  14.      return time.strftime(fmt, tm)
  15.  
  16.  
时间字符串 转换为 秒为单位的浮点数
  1.  
  2.  def str2time(str, fmt='%a %b %d %H:%M:%S %Y'):
  3.      tm = time.strptime(str, fmt)
  4.      return time.mktime(tm)
  5.  
  6.  # 这里也是参考函数

作业练习

根据起始和终止日期生成中间日期

pandas.to_datetimeargerrors ='raise'utc = Noneformat = Noneunit = None )将字符串转换为日期函数

  1.  #转换时间字符串格式,方法二:
  2.  import pandas as pd
  3.  start = pd.to_datetime("20200922")
  4.  print("===================================")
  5.  print(start)
  6.  s=start.strftime('%Y-%m-%d') # 将datetime转为字符串,并以'%Y-%m-%d'格式输出
  7.  print(s)
  8.  print("===================================")
  9.  
  10.  """
  11.  ==================================
  12.  2020-09-22 00:00:00
  13.  2020-09-22
  14.  ==================================
  15.  """
  16.  

编写函数:

  1.  
  2.  
  3.  import time;  # 引入time模块
  4.  from pandas import DatetimeIndex
  5.  
  6.  
  7.  def date_range(cls, start=None, end=None, periods=None, freq=None, input_format=None, out_format=None):
  8.      """
  9.     生成时间序列
  10.     :param start: 序列开始时间
  11.     :param end: 序列结束时间, 给定start时, 结束时间包含end
  12.     :param periods: int, 生成的时间序列长度
  13.     :param freq: 要生成时间序列的时间间隔
  14.     :param out_format: 是否输出格式化后的字符串, 若要输出可指定输出格式. "%Y-%m-%d %H:%M:%S"
  15.     :param input_format: 若start或end是字符串且无法自动推断时间格式则需指定格式
  16.     :return: [date or date_str]
  17.  """
  18.  
  19.  start = pd.to_datetime("20200918")
  20.  end = pd.to_datetime("20200922")
  21.  pd.date_range(start, end)
  22.  DatetimeIndex(['2020-09-28', '2020-09-29', '2020-09-30', '2020-09-13', '2020-06-01', '2020-06-02'])
  23.  

例题1:

  1.  
  2.  #例1:
  3.  dates = ["20200912","20200922"]
  4.  def create_dates(dates):
  5.      """
  6.     :param dates: ["20200912","20200922"]
  7.     :return:
  8.     """
  9.      start = pd.to_datetime(dates[0])
  10.      end = pd.to_datetime(dates[1])
  11.      dates = pd.date_range(start, end)  # 生成时间字符串列表
  12.      dates = dates.strftime('%Y%m%d')   #格式化时间数据
  13.      return list(dates)
  14.  
  15.  print("例1")
  16.  print(create_dates(dates))
  17.  
  18.  
  19.  """
  20.  例1
  21.  ['20200912', '20200913', '20200914', '20200915', '20200916', '20200917', '20200918', '20200919', '20200920', '20200921', '20200922']
  22.  
  23.  """
  24.  

例题2:

  1.  
  2.  #例2
  3.  
  4.  df = pd.DataFrame({'year': [2019, 2020],
  5.                         'month': [2, 3],
  6.                         'day': [4, 5]})
  7.  pd.to_datetime(df)
  8.  
  9.  print("例2")
  10.  print(pd.to_datetime(df))
  11.  
  12.  
  13.  """
  14.  例2
  15.  0   2019-02-04
  16.  1   2020-03-05
  17.  dtype: datetime64[ns]
  18.  """
  19.  

Day18.python文件/目录

2020-09-21

Day17.String字符串处理库

2020-09-19

Day16.文件的处理

2020-09-18

Day15.异常的处理

2020-09-17

Day14.模块&包

2020-09-16

Day13.继承&多态

2020-09-15

Day12.魔法方法&方法重写

2020-09-14

Day11.类和对象这回事儿

2020-09-12

Day10.高阶函数介绍

2020-09-11

Day9.函数进阶

2020-09-10

Day8.函数那些事儿

2020-09-09

Day7.数据类型-集合

2020-09-08

Day6.数据类型-字典

2020-09-07

Day5.布尔&元组&字符串大合集

2020-09-05

Day4.数据类型-列表

2020-09-04

Day3.判断&循环语句

2020-09-03

Day2.不就是运算符吗!

2020-09-02

Day1.基本操作与格式规范

2020-09-01

Python基本操作与格式规范

2020-09-01

全网最全Python环境小白篇

2020-08-31

学Python的正确方式,100%有用!

2020-08-30

好文章,我 在看❤

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/66502
推荐阅读
相关标签
  

闽ICP备14008679号