时间相关

时间相关

一 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>
posted @ 2019-12-18 13:19  张明岩  阅读(115)  评论(0编辑  收藏  举报