Python 时间操作

取现行时间

  • 取年 datetime.now.now().yeay
  • 取月 datetime.now.now().month
  • 取日 datetime.now.now().day
  • 13 位时间戳 int(round(time.time() * 1000))
  • 10 位时间戳 int(time.time())
from datetime import datetime

"""取当前时间与日期"""
datetime.now()
# 2019-06-22 22:15:16.529856

"""取年"""
datetime.now().year
# 2019

"""取月"""
datetime.now().month
# 06

"""取日"""
datetime.now().day
# 22

时间对比

字符串时间对比

d1 = datetime.strptime('2021-08-03 09:57:41', '%Y-%m-%d %H:%M:%S')
d2 = datetime.strptime('2021-07-03 09:57:41', '%Y-%m-%d %H:%M:%S')
print(d1-d2)
31 days, 0:00:00

上面是一个简单的计算方式,可以算出两个时间间隔

计算隔天数

import time
from datetime import datetime


def date_distance(date1, date2):
    """
    1 str 转成 datetime.datetime 类型
    2 datetime.datetime 转成 秒
    3 distance_second = int(秒1) - int(秒2)
    4 return 两个日期的间隔天数
    """
    try:
        # 1 str 转成 datetime.datetime 类型
        date1 = datetime.strptime(date1, '%Y-%m-%d')
        date2 = datetime.strptime(date2, '%Y-%m-%d')
    except:
        print('时间转换失败!\n{} , {} 的格式应为 %Y-%m%d  例如:2021-05-09 '.format(date1, date2))
    # 2 datetime.datetime 转成 秒
    second1 = time.mktime(date1.timetuple())
    second2 = time.mktime(date2.timetuple())
    # 3 res = int(秒1) - int(秒2)
    distance_second = int(second1) - int(second2)
    # 4 返回间隔日期
    distance_date = int(distance_second / 60 / 60 / 24)
    if distance_date < 0:
        distance_date = -distance_date
    return distance_date


if __name__ == '__main__':
    res = date_distance('2021-05-05', '2021-05-08')
    print(res)

计算相差秒数

比如取现在的时间与今晚12点,还差多少秒

tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
dt = tomorrow.strftime('%Y-%m-%d')
time_array = time.strptime(f"{dt} 00:00:00", "%Y-%m-%d %H:%M:%S")
print(int(time.mktime(time_array))-int(time.time()))

取当前周数

  • 返回周几 .weekday()+1
  • 返回第几周(当年中).isocalendar()
from datetime import datetime

"""返回今天是周几"""
datetime.now().weekday()+1

"""范围今天是今年的第几周"""
datetime.now().isocalendar()
# 返回元祖 (2019, 25, 6) 年、第几周、周几

格式化日期

  1. date() 自动化设置
  2. time() 设置
  3. 利用 strftime() 自定义时间格式
from datetime import datetime

datetime.now().date()
# datetime.date(2019, 6, 22)

datetime.now().time()
# datetime.time(22, 26, 52, 200593)
代码 说明
%H 小时(24小时制)
%I 小时(12小时制)
%M 两位数的分钟
%S
%w 星期几(0开始)
%U 每年的第几周,周日为每周第一天
%W 每年的第几周,周一为每周第一天
%F 简写为 年-月-日
%D 简写为 月/日/年

strftime() 案例

from datetime import datetime

datetime.now().strftime('%Y-%m-%d')

时间与字符串转换

时间 ==> 字符串

  1. 取出当前时间
  2. 利用 strftime() 组装成所需格式
  3. 利用 str() 转换成所需字符串
from datetime import datetime

now = datetime.now()
str(now.strftime('%Y-%m-%d'))

字符串 ==> 时间

使用 parse() 函数将时间格式转化为字符串格式

from datetime import datetime
from dateutil.parser import parse

str_time = '2019-06-22'
parse(str_time)

列举日期

枚举年所有日期

import arrow
import datetime
import calendar

def isLeapYear(years):
    """列举全年日期"""
    assert isinstance(years, int), "请输入整数年,如 2018"
    if (years % 4 == 0 and years % 100 != 0) or (years % 400 == 0):  # 判断是否是闰年
        days_sum = 366
        return days_sum
    else:
        days_sum = 365
        return days_sum


def getAllDayPerYear(years):
    start_date = '%s-1-1' % years
    a = 0
    all_date_list = []
    days_sum = isLeapYear(int(years))
    print()
    while a < days_sum:
        b = arrow.get(start_date).shift(days=a).format("YYYY-MM-DD")
        a += 1
        all_date_list.append(b)
    return all_date_list
	
getAllDayPerYear('2020')

枚举月所有日期

def getAllDayMonth(years, month):
    a = 0
    all_date_list = []
    start_date = '%s-%s-1' % (years, month)
    monthRange = calendar.monthrange(int(years),int(month))[1]
    while a < monthRange:
        b = arrow.get(start_date).shift(days=a).format("YYYY-MM-DD")
        a += 1
        all_date_list.append(b)
    return all_date_list



if __name__ == "__main__":
    month = datetime.datetime.now().month
    print(getAllDayMonth('2020', '10'))

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!