时间相关
时间相关
一 python time与datime知识点(重点)
# 相关博客
http://www.cnblogs.com/awakenedy/articles/9182036.html#undefined
# print(time())
print(datetime.datetime.now())# 2018-12-12 22:20:49.120235
print(datetime.datetime.now().year)# 2018
print(datetime.datetime.now().month)# 12
print(datetime.datetime.now().day)# 12
print(datetime.datetime.now().hour)# 22
print(datetime.datetime.now().minute)# 39
print(datetime.datetime.now().second)# 14
print(datetime.datetime.now().date())# 2018-12-12
print(datetime.datetime.now().date().year)# 2018
print(datetime.datetime.now().date().month)# 12 月
print(datetime.datetime.now().date().day)# 12 日
print(datetime.date.today()) #2018-12-12
print(datetime.date(2017, 3, 22))#2017-03-22
print(type(datetime.date(2017, 3, 15)))#
'''元祖'''
a =datetime.date(2017, 3, 22)
print(a.isocalendar())# 出来元祖(2017, 12, 3)
print(a.isocalendar()[0])# 2017
print(type(a.isocalendar()[0]))#
'''字符串 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串; 常用'''
a =datetime.date(2017, 3, 22)
print(a.isoformat())#出来字符串 "2017-03-22"
print(type(a.isoformat()))#
a = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") # "2019-12-21 09:05:00"
print(a)
'''星期'''
a =datetime.date(2017, 3, 22)
print(a.weekday())#2 ----------------->0 是周一 1是周二 2是周三以此类推
#返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
print(a.isoweekday())#3 -------------->1 是周一 2是周二 3是周三以此类推
'''计算'''
a =datetime.date(2017, 3, 22)
b =datetime.date(2017, 3, 15)
print(a-b)#7 days, 0:00:00
print(b-a)#-7 days, 0:00:00
print((a-b).total_seconds())#604800.0 统计相差多少秒
print()
'''datetime.date(2017, 3, 22).timetuple()'''
a =datetime.date(2017, 3, 22)
print(a.timetuple())#time.struct_time(tm_year=2017, tm_mon=3, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=81, tm_isdst=-1)
print(a.timetuple().tm_hour)#0 这个的时间部分都是0
print(a.timetuple().tm_year)#2017
print( a.timetuple().tm_mon)#3
print(a.timetuple().tm_mday)#22
# a =datetime.date(2017, 3, 22)
# print(a)
'''toordinal(...): 返回公元公历开始到现在的天数。公元1年1月1日为1'''
a = datetime.date(2017,3,22)
print(a.toordinal())#736410
print(type(a.toordinal()))#
'''replace'''
a = datetime.date(2017,3,22)#2017-03-22
b = a.replace(year=2018)#2018-03-22
b = a.replace(month=6)#2017-06-22
'''根据给定的时间戮,返回一个date对象'''
a = time.time()
print(a)#1544627497.917954
print(datetime.date.fromtimestamp(a))#2018-12-12
print(datetime.datetime.fromtimestamp(a))#2018-12-12 23:12:07.575701
'''.today(...):返回当前日期'''
print(datetime.date.today())#2018-12-12
''' datetime.date.max 可以表示的最大值'''
print( datetime.date.max) #9999-12-31
'''datetime.date.min 可以表示的最小值'''
print(datetime.date.min) #0001-01-01
'''如果你想将日期对象转化为字符串对象的话,格式话输出'''
a = datetime.date(2017,3,22)
print(a.format('%Y-%m-%d'))# "2017-03-22"
print( a.format('%Y/%m/%d'))#"2017/03/22"
print( a.format('%y/%m/%d'))#"17/03/22"
#等价于
print(a.strftime("%Y-%m-%d"))# "2017-03-22"
#如果只是相简单的获得日期的字符串,则使用str(...)
print( a.str())#" 2017-03-22"
字符串生成time对象
def datetimediff(var1, var2):
"""比较两个时间差, 日期格式必须是%Y-%m-%d %H:%M:%S格式的datetime字符串"""
# noinspection PyBroadException
try:
datetime1 = datetime.strptime(var1, "%Y-%m-%d %H:%M:%S") # 字符串生成 datime对象
datetime2 = datetime.strptime(var2, "%Y-%m-%d %H:%M:%S")
except Exception:
return 0
return int((datetime1-datetime2).total_seconds())
"字符串生成datetime对象"
import time
from datetime import datetime
now_time = datetime.utcnow()
now_time = str(now_time).split(".")[0]
print(now_time,type(now_time))
# now_time = time.strptime(now_time, "%Y-%m-%d %X")
now_time = datetime.strptime(now_time, "%Y-%m-%d %X")
print(now_time)
print(type(now_time)) # 把一个字符串转datetime类型
# print(datetime)
"处理今日的时间"
today_begin = datetime.now().strftime("%Y-%m-%d 00:00:00")
today_end = datetime.now().strftime("%Y-%m-%d 23:59:59")
'''
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
'''
二 python 时间功能函数系列
函数一
# 时间功能函数
# 取出来现在的时间
now = datetime.now()
#做出预期的时间
if int(time_type) == 1: # 日
start_time = get_datetime(day=time_value) #几天后的时间
last_time = start_time
elif int(time_type) == 2: # 周
now = datetime.now()
print(now.weekday())#0 周一 当天是周几
print(get_datetime(day=-1).weekday())#6 周日
print(get_datetime(day=-2).weekday())#5 周六
start_time = get_datetime(week=time_value, day=-(now.weekday()))#到第几周的周一
last_time = get_datetime(week=time_value, day=6 - (now.weekday()))#到第几周的周日
elif int(time_type) == 3: # 月
target_month = get_datetime(month=time_value) #目标月份
start_time = datetime(target_month.year, target_month.month, 1)#目标月份的年月 然后1号
last_time = get_datetime(start_time, month=1, day=-1)#目标月份的月 然后减1 也就是月末
else:
current_app.logger.debug("时间类型参数错误:account:%s,shop_id:%s,staff_id:%s,time_type:%s", g.user.account, shop_id, staff_id, time_type)
return api_return("PARAM_ERROR", "时间类型参数错误")
函数二
两个date()类型相减 调用.days 可以拿到天数
last_day += (i[0] - now.date()).days + 1 # +1是算上当天
函数三
import datetime
import time
if isinstance(today, datetime):
today = today.date()#最后一次更新的日期
elif isinstance(today, date):
pass
else:
today = date.today()
try:
birthday = born.replace(year=today.year)# 把今天的年 替换到出生的那一年上
except ValueError: #切记替换年份的时候要考虑 是不是闰年的问题
# raised when birth date is February 29
# and the current year is not a leap year
birthday = born.replace(year=today.year, day=born.day-1) #
if birthday > today:#说明我今年还没有过生日呢
return today.year - born.year - 1
else:
return today.year - born.year
函数四
from dateutil.relativedelta import relativedelta
from datetime import timedelta
'''
工具函数
'''
def get_datetime(now=None, month=0, week=0, day=0, hour=0, minute=0, second=0):
if now is None:
now = datetime.datetime.now()
res = now + relativedelta(months=month) + timedelta(weeks=week) + timedelta(days=day) + timedelta(hours=hour) + timedelta(minutes=minute) + timedelta(seconds=second)
return res
last_time = get_datetime(day=-1)#2018-12-11 23:27:12.597629 日期里面减掉了一天
'''
工具函数2
'''
time_type = 1
time_value = 2
now = datetime.datetime.now()
if int(time_type) == 1: # 日 以日为计算 n天后的那一天
start_time = get_datetime(day=time_value)
last_time = start_time
elif int(time_type) == 2: # 周
start_time = get_datetime(week=time_value, day=-(now.weekday())) # 取到想要的那周的周一
last_time = get_datetime(week=time_value, day=6 - (now.weekday())) # 取到想要的那周的周日
elif int(time_type) == 3: # 月
target_month = get_datetime(month=time_value) # 从先在开始算加上一个月
start_time = datetime(target_month.year, target_month.month, 1) # 从现在开始算 取出年 取出月 1
last_time = get_datetime(start_time, month=1, day=-1) # 然后再加一个月 减掉1天 取出那个月末
print(last_time)
''' 比较的时候别忘了转一下格式
query = query.filter(StudentOrder.purchase_date >= start_time.strftime("%Y-%m-%d"),
StudentOrder.purchase_date <= last_time.strftime("%Y-%m-%d"))
'''
a =datetime.date(2018,3,5)
print( a > "2018-06-05" )
'''
工具函数3
'''
import re
def is_date(var):
if var is None:
return False
regexp = r"^(1\d{3}|2\d{3})[-/.]{1}(0?\d|1[0-2]{1})[-/.]{1}(0?\d|[12]{1}\d|3[01]{1})$"
if re.search(regexp, str(var)):
try:
return datetime.datetime.strptime(re.sub(r'[/.]', '-', str(var)), '%Y-%m-%d') # 防止出现2018.06.31这种错误
except ValueError:
return False
else:
return False
函数四
def get_time():
import time
from datetime import datetime
now_time = datetime.utcnow()
now_time = str(now_time).split(".")[0]
now_time = time.strptime(now_time, "%Y-%m-%d %X")
now_time = time.mktime(now_time)
return now_time
三 js 时间相关
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Date日期</title>
</head>
<body>
<script>
//获取日期对象 中国标准时间
var date1 = new Date();
console.log(date1);
console.log(date1.getTime(),'//获取时间戳 1557760055014');
//创建未来的时间
// var date_2 = new Date(2021);
// console.log(date2,'创建未来的时间 ');
//从1970加2020毫秒
var date_3 = new Date(2020);//一个参数的时候,如果两个参数的时候就是创建的未来时间
console.log(date_3,'//一个参数的时候,如果两个参数的时候就是创建的未来时间');
var date_2 = new Date(2010,10,10,13,21,10);
console.log(date_2,'创建未来时间');
var date = new Date();
date.setFullYear(1978);
date.setUTCHours(1);
console.log(date);
// 2018-08-13 12:34:23
console.log(date.getFullYear());
console.log(date.getMonth() + 1);
console.log(date.getDate());
console.log('星期', date.getDay());
console.log(date.getHours())
console.log(date.getMinutes())
console.log(date.getSeconds())
console.log(date.getMilliseconds())
//时间戳
console.log(date.getTime()); //单位是毫秒
//0时区的时间
console.log(date.getUTCFullYear())
console.log(date.getUTCDate())
console.log(date.getUTCHours())
console.log('------------------------时间转换--------------------')
// 1 "2018-09-20 16:50:48"转换为时间戳 单位是毫秒 /1000 为秒
var timeDate = "2018-09-20 16:50:48";
var Time = new Date(timeDate);
var timestemp = Time.getTime();
console.log(timestemp,'转换为时间戳'); //1537433448000
// 2 时间戳转换为yyyy-MM-dd
var time = parseInt('1544371200000')
let date4 = new Date(time);//转换成中国标准时间:Mon Dec 10 2018 00:00:00 GMT+0800 (中国标准时间)
var str1 = date4.getFullYear() + '-' + (date4.getMonth() + 1) + '-' + date4.getDate() + ' ' + date4.getHours() + ':' + date4.getMinutes() + ':' + date4.getSeconds();
console.log(str1,'时间戳转换为yyyy-MM-dd')
// 中国标准时间转换为时间戳
var t='Thu Sep 20 2018 16:47:52 GMT+0800 (中国标准时间)';
var time2=new Date(t);
let date5=time2.getTime();
console.log(data5); //1537433272000
// 中国标准时间转换为yyyy-MM-dd
var d = new Date('Thu May 12 2016 08:00:00 GMT+0800 (中国标准时间)');
var datetime=d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
</script>
</body>
</html>