欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-08-11 15:49:02
文章目录官方文档(常用日期时间模块)14. 时间的表示datetime模块日期和时间 datetimedatetime.datedatetime.timedatetime.datetime字符串和时间 互相转换(strptime, strftime)datetime.timedelta在现有日期上往后推 100 天给定一个时间 获取 3000 秒 以后的时间当然 也可以把 属性换成 hours批量获取文件修改时间判断是否为闰年calendar 模块年的日历图月的日历图月有几天月的第一天月的最后一天获取当前时...

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

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