当前位置: 移动技术网 > IT编程>脚本编程>Python > 14_时间的表示_日期操作_时间操作_time_datetime

14_时间的表示_日期操作_时间操作_time_datetime

2020年07月26日  | 移动技术网IT编程  | 我要评论

官方文档(常用日期时间模块)

datetime

time

calendar

Python3 日期和时间 w3c教程

Python 计算每个月天数

14. 时间的表示

  计算机中时间的表示是从 “1970 年 1月 1日 00:00:00”开始,以毫秒(1/1000 秒) 进行计算。我们也把1970 年这个时刻成为“unix 时间点”。

  这样,我们就把时间全部用数字来表示了。

  python中可以通过time.time()获得当前时刻,返回的值是以秒为单位,带微秒 (1/1000 毫秒)精度的浮点值。 例如:1530167364.8566

>>> import time 
>>> time.time
<built-in function time>
>>> time.time()
1595651082.173596
>>> b = int(time.time()) # 取整 时间
>>> b
1530168754 
>>> totalMinutes = b/60 # 除60 换为分钟
>>> totalMinutes 
25502812.566666666 
>>> totalMinutes = b//60 # 整除 60 
>>> totalMinutes 
25502812 
>>> totalHours = totalMinutes//60  # 换为 小时
>>> totalHours 
425046 
>>> totalDays = totalHours//24 # 换为 天
>>> totalDays 
17710 
>>> totalYears = totalDays//365 # 换为年  距今 48 年
>>> totalYears 
48

datetime模块

python-基础-时间日期处理小结(datetime模块)

import datetime

# 获取当前时间 当前日期

now = datetime.datetime.now().strftime("%Y-%m-%d") # '2020-07-25' 当前 日期 

now2 = datetime.datetime.now()
# datetime.datetime(2020, 7, 25, 12, 30, 8, 968791)  当前 时间 的 datetime对象
i=3
time = datetime.date.today()+datetime.timedelta(days=i)
# datetime.date(2020, 7, 28) 加 3 天 的日期
print(now)
print(now2)
print(time)
import datetime
now = datetime.datetime.now()
print(now.hour, now.minute, now.second)
import datetime

# 获取当前时间

now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# '2020-07-25 12:32:12'
print(now)
 
 

日期和时间 datetime

datetime
date
datetime
time
import datetime

最大年份

datetime.MAXYEAR

最小年份

datetime.MINYEAR

获取今日日期

today=datetime.date.today()
today
today.year # 返回今天 的 年
today.month  # 返回 今天 的 月
today.day  # 返回今天的日

weekday 索引 从 0 开始

isoweekeday 从1 开始。 是 常见的那种。

today.weekday()

>>> datetime.date.today().weekday()
5 # 我现在是  2020/7/25 星期六   它返回 5   因为 索引 从 0 开始  。  
# 0 1 2 3 4 5 6  索引
today.isoweekday()

>>> datetime.date.today().isoweekday()
6   # 这个方法返回的就是我们常用的的 索引  从 1 开始 的 
# 我现在是  2020/7/25 星期六

datetime.date

birthdate=datetime.date(2010,3,12) # 构造一个日期
birthdate.year # 看一下 日期的 年

# month
# day  
# 这些属性都可以使用

datetime.time

t=datetime.time(15,46,32) # 构造一个时间
t.hour # 看一下 时
t.minute # 看一下 分
t.second # 看一下秒

datetime.datetime

now=datetime.datetime.now() # 返回现在的时间 
>>> now
datetime.datetime(2020, 7, 25, 12, 39, 22, 6032)
>>> now=datetime.datetime.now()
>>> now
datetime.datetime(2020, 7, 25, 12, 39, 22, 6032)
>>> now.year # 年
2020
>>> now.second # 秒
22
>>> now.microsecond # 微秒
6032

字符串和时间 互相转换(strptime, strftime)

s='2018-3-15'
type(s)

>>> s='2018-3-15'
>>> type(s)
<class 'str'>

# 字符  转时间 
t=datetime.datetime.strptime(s,'%Y-%m-%d')
t

>>> t=datetime.datetime.strptime(s,'%Y-%m-%d')
>>> t
datetime.datetime(2018, 3, 15, 0, 0)

格式代码的官方文档-中文

# 时间 转 字符串 
now=datetime.datetime.now() # 获取现在的时间
txt=now.strftime('%Y/%m/%d') # 时间 转字符串 
txt1=now.strftime('%Y/%m/%d %H:%M:%S')  # 根据需求 写 相应的格式代码  
txt2=now.strftime('%Y/%m/%d %h') # 小写的 h 也是月份
print(f"""{txt}
{txt1}
{txt2}
""")


txt : 2020/07/25
txt1 : 2020/07/25 12:44:08
txt2 : 2020/07/25 Jul

datetime.timedelta

d=datetime.datetime(2018,3,5,22,44)
d

>>> d=datetime.datetime(2018,3,5,22,44) # 构造时间 日期
>>> d
datetime.datetime(2018, 3, 5, 22, 44)
birthdate=datetime.datetime(2016,5,2,19,33,44) # 构造时间 日期
birthdate

>>> birthdate=datetime.datetime(2016,5,2,19,33,44)
>>> birthdate
datetime.datetime(2016, 5, 2, 19, 33, 44)
diff=d-birthdate
diff



>>> diff=d-birthdate  # 用一个日期时间 减去一个日期时间
>>> diff
datetime.timedelta(days=672, seconds=11416)  # 返回的是一个  timedelta 对象
>>> diff.days # 查看天
672
>>> diff.seconds  # 查看 秒
11416
>>> diff.total_seconds() # 返回  总共的秒数 。 把 天转换为秒 + 现有的秒 
58072216.0
diff.days  # 这个对象也可以使用   days 属性 以及 seconds 等
diff.seconds
diff.total_seconds()
# 总的时间换成 秒

在现有日期上往后推 100 天


o=datetime.datetime(2008,8,8,20,8) # 构造一个时间
o+datetime.timedelta(days=100) # 加 100 天


>>> o=datetime.datetime(2008,8,8,20,8) # 构造一个时间
>>> o+datetime.timedelta(days=100) # 加 100 天
datetime.datetime(2008, 11, 16, 20, 8)

如果 我要 往 前推 100 天呢

days = -100 就行了

d

>>> d
datetime.datetime(2018, 3, 5, 22, 44)
result=d+datetime.timedelta(days=-100) # 
result

>>> result=d+datetime.timedelta(days=-100)
>>> result
datetime.datetime(2017, 11, 25, 22, 44)

给定一个时间 获取 3000 秒 以后的时间

d

>>> d
datetime.datetime(2018, 3, 5, 22, 44)
d+datetime.timedelta(seconds=3000) # 3000秒之后

>>> d+datetime.timedelta(seconds=3000) # 3000秒之后
datetime.datetime(2018, 3, 5, 23, 34)

当然 也可以把 属性换成 hours

时间 d 五小时之前的时间

d+datetime.timedelta(hours=-5)

>>> d
datetime.datetime(2018, 3, 5, 22, 44)
>>> d+datetime.timedelta(hours=-5)
datetime.datetime(2018, 3, 5, 17, 44)

批量获取文件修改时间

os.walk(top, topdown=True, onerror=None, followlinks=False) 此方法 返回一个 三元组 (产生一个3元组 (dirpath, dirnames, filenames) .dirpath 是 你刚才输入的目录路径, dirname 此目录下的子目录名字(不包含子目录的子目录),filenames 是文件名(不包含子目录的文件)。 )

如果需要子目录的内容 请 使用 os.listdir


import os
from datetime import datetime
print(f"当前时间:{datetime:now().strftime('%Y-%m-%d %H:%M:%S')}")
def get_modify_time(indir):
    for root,_,files in os.walk(indir):
    
    # os.walk 遍历
        for file in files:
        # 遍历文件名
            absfile=os.path.join(root,file)# 构造绝对路径
            # os.path.getmtime 获取文件修改的时间
            # datetime.fromtimestap 从时间戳 构建 一个datetime对象
            modtime=datetime.fromtimestap(os.path.getmtime(absfile))
            now=datetime.now() # 获取现在的时间
            difftime=now-modtime # 现在时间 减去 修改时间
            if difftiem.days<20: # 看看  过去了多少天 利用days 属性
                
                print(f"""{absfile}修改时间[{modtime.strftime('%Y-%m-%d %H:%M:%S')}]
                距今[{difftime.days:3d}天{difftime.seconds//3600:2d}时{difftime.senconds%3600//60}]""")

判断是否为闰年

import calendar
from datetime import date
mydate=date.today()
toYear=mydate.year
is_leap=calendar.isleap(toYear) # 利用 calendar 的 isleap 函数 判断 是否是闰年
print_leap_str="%s年是闰年" if is_leap else "%s年不是闰年\n"
print(print_leap_str %toYear)

calendar 模块

年的日历图

import calendar
from datetime import  date
mydate=date.today()
year_calendar_str=calendar.calendar(mydate.year) # 其实 只要输入一个  年份 都可以输出的。 
# calendar.calendar 输出年日历  
print(f"\n{year_calendar_str}\n")
# 年 的 输出太多 就不展示了

月的日历图


import calendar
from datetime import date

mydate=date.today()
month_calendar_str=calendar.month(mydate.year,mydate.month)
# calendar.month 输出  月日历。  需要输入  参数  年  和  月
print(f"\n{month_calendar_str}")

输出:

     July 2020
Mo Tu We Th Fr Sa Su
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

月有几天

import calendar
from datetime import date
print(weekday)

mydate=date.today()

weekday,days=calendar.monthrange(mydate.year,mydate.month)
# calendar.monthrange 输入参数 年 和 月 
# 返回  一个元组 ( 第一天是周几,这个月有多少天) 这里是 2020 年 7月 返回(2,31) 
# 这个 周几  也是 索引 0 开始的  所以 要 + 1 
print(f"{mydate.year}年-{mydate.month}月的第一天是那一周的第{weekday+1}天\n")

print(f"{mydate.year}年-{mydate.month}月一共有{days}天\n")


输出:

2020-7月的第一天是那一周的第32020-7月一共有31

月的第一天(这个其实没啥意义。 哪个月的第一天也是 1 号)

from datetime import date

mydate=date.today()
month_first_day=date(mydate.year,mydate.month,1)

print(f"当月第一天的日期:{month_first_day}")

月的最后一天(这个看之前的一个月有多少天, 最后一天就是多少嘛)

from datetime import date
import calendar
mydate =date.today()
_,days=calendar.monthrange(mydate.year,mydate.month)

month_last_day=date(mydate.year,mydate.month,days)
print(f"当月最后一天的日期:{month_last_day}")

获取当前时间(datetime 模块 的方式和 time 模块 的方式)

from datetime import date,datetime
from time import localtime
today_date=date.today()

print(today_date)

today_time=datetime.today()
print(today_time)

#方法1 
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

#方法2
local_time=time.strftime("%Y-%m-%d %H:%M:%S",localtime())

print(f"方法1:{local_time}\n方法2: {now}")

字符时间转时间(time 模块)

from time import strptime
struct_time=strptime('2020-05-22 10:10:08', "%Y-%m-%d %H:%M:%S")

print(struct_time)

时间转字符时间(time模块)

from time import strftime, strptime, localtime

print(localtime())#这是输入的时间
print(strftime("%m-%d-%Y %H:%M:%S", localtime()))  # 转化为定制的格式

计算指定日期当月最后一天的日期和该月天数

有了 之前的那个 calendar.monthrange 随时可以 提取出来。

#计算指定日期当月最后一天的日期和该月天数
import datetime
import calendar
init_date = datetime.date.today()
print('当前给定时间:', init_date)
current_month_days=calendar.monthrange(init_date.year,init_date.month)[1]
print(calendar.month(2019,init_date.month))
current_month_last_day = datetime.date(init_date.year, init_date.month, current_month_days)
print("当月最后一天:",current_month_last_day)
print("该月天数:",current_month_days)
    当前给定时间: 2019-12-08
       December 2019
    Mo Tu We Th Fr Sa Su
                       1
     2  3  4  5  6  7  8
     9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31
当月最后一天: 2019-12-31
该月天数: 31

本文地址:https://blog.csdn.net/qq_20502569/article/details/107576829

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网