zoukankan      html  css  js  c++  java
  • Python时间模块常用操作总结

    时间模块常用操作总结为下列各个函数:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')
    import time
    import datetime
    import calendar
    
    
    def second_to_datetime_string(seconds):
        """
        将从公元0年开始的秒数转换为datetime的string形式
        :param seconds: 从公元0年开始的秒数
        :return: datetime的string形式
        """
        s = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(float(seconds)))
        year = s.split('-', 1)[0]
        rest = s.split('-', 1)[1]
        year = int(year) - 1970  # datetime是从1970开始的,因此计算时需要减去1970
        return '{}-{}'.format(str(year), rest)
    
    
    def gregorian_date_to_str(year, month, day):
        """
        将公元日期转换成字符串,year占4位,month占2位,day占2位,位数不足补0
        :param year: 年份,例如2017
        :param month: 月份,例如8或者08
        :param day: 天,例如12或者02或者2
        :return: 返回位数固定的字符串,例如2017-08-22
        """
        return '{}-{}-{}'.format(
            year,
            month if len(str(month)) == 2 else '0{}'.format(month),
            day if len(str(day)) == 2 else '0{}'.format(day)
        )
    
    
    def gregorian_date_to_str_1(year, month, day):
        """
        将公元日期转换成字符串,year占4位,month占2位,day占2位,位数不足补0
        :param year: 年份,例如2017
        :param month: 月份,例如8或者08
        :param day: 天,例如12或者02或者2
        :return: 返回位数固定的字符串,不带-,例如20170822
        """
        return '{}{}{}'.format(
            year,
            month if len(str(month)) == 2 else '0{}'.format(month),
            day if len(str(day)) == 2 else '0{}'.format(day)
        )
    
    
    def get_element_from_date_str(date_str):
        """获取一个日期字符串的年月日"""
        return date_str[0:4], date_str[4:6], date_str[6:8]
    
    
    def is_valid_date(date_str):
        """判断是否是一个有效的日期字符串"""
        try:
            time.strptime(date_str, '%Y%m%d')
            return True
        except ValueError:
            return False
    
    
    def get_latter_1_day_str(date_str):
        """
        获取data_str后一天的日期字符串
        :param date_str: 指定日期字符串
        :return: 返回指定日期字符串后一天的日期字符串
        """
        dt = datetime.datetime.strptime(date_str, '%Y%m%d')
        one_day = datetime.timedelta(days=1)
        former_day = dt + one_day
        return former_day.strftime('%Y%m%d')
    
    
    def get_latter_n_day_str(date_str, n):
        """
        获取data_str后n天的日期字符串
        :param date_str: 指定日期字符串
        :return: 返回指定日期字符串后n天的日期字符串
        """
        dt = datetime.datetime.strptime(date_str, '%Y%m%d')
        one_day = datetime.timedelta(days=days)
        former_day = dt + one_day
        return former_day.strftime('%Y%m%d')
    
    
    def get_yesterday_str():
        """
        获取昨天的日期字符串
        :return: 返回昨天日期字符串
        """
        today = datetime.date.today()
        one_day = datetime.timedelta(days=1)
        yesterday = today - one_day
        return yesterday.strftime('%Y%m%d')
    
    
    def get_former_1_day_str(date_str):
        """
        获取data_str前一天的日期字符串
        :param date_str: 指定日期字符串
        :return: 返回指定日期字符串前一天的日期字符串
        """
        dt = datetime.datetime.strptime(date_str, '%Y%m%d')
        one_day = datetime.timedelta(days=1)
        former_day = dt - one_day
        return former_day.strftime('%Y%m%d')
    
    
    def get_former_n_day_str(date_str, n):
        """
        获取data_str前n天的日期字符串
        :param date_str: 指定日期字符串
        :param n: number of day
        :return: 返回指定日期字符串前n天的日期字符串
        """
        dt = datetime.datetime.strptime(date_str, '%Y%m%d')
        n_day = datetime.timedelta(days=n)
        former_n_day = dt - n_day
        return former_n_day.strftime('%Y%m%d')
    
    
    def get_universal_time():
        """
        获取当前时间
        :return: 返回当前时间,格式:2017-08-29 02:43:19
        """
        t = time.gmtime()
        time_tuple = (t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec)
        dt = datetime.datetime(*time_tuple)
        return dt.strftime('%Y-%m-%d %H:%M:%S')
    
    
    def datetime_to_gregorian_seconds(dt):
        """
        获取从公元0年1月1日开始到当天0点所经过的秒数
        :param dt: datetime.datetime类型
        :return: 返回从公元0年1月1日开始到当天0点所经过的秒数
        """
        d = dt.date()
        t = dt.time()
        # toordinal 从1年1月1日开始, erlang 的datetime_to_gregorian_seconds和date_to_gregorian_days从0年1月1日开始
        # 当天不算所以需要减1天
        return (d.toordinal() + 365 - 1) * 86400 + time_to_second(t.hour, t.minute, t.second)
    
    
    def time_to_second(time_h, time_m, time_s):
        """
        根据给定的time_h, time_m, time_s计算当天已过去的时间,秒为单位
        :param time_h: 小时
        :param time_m: 分
        :param time_s: 秒
        :return: 返回计算的second
        """
        return int(time_h) * 3600 + int(time_m) * 60 + int(time_s)
    
    
    def utc_time_to_second(utc_time):
        """
        根据给定的utc_time计算当天已过去的时间,秒为单位
        :param utc_time: utc时间戳,类似1464830584
        :return: 返回计算的second
        """
        t = datetime.datetime.fromtimestamp(int(utc_time))
        return t.hour * 3600 + t.minute * 60 + t.second
    
    
    def get_today_start_time():
    	"""获取当天开始时间"""
    	dt = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
    	return dt.strftime('%Y-%m-%d %H:%M:%S')
    
    
    def get_today_end_time():
    	"""获取当天结束时间"""
    	dt = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
    	return dt.strftime('%Y-%m-%d %H:%M:%S')
    
    
    def get_final_day_of_current_week():
    	"""获取本周最后一天:周天"""
    	today = datetime.date.today()
    	sunday = today + datetime.timedelta(6 - today.weekday())
    	return sunday.strftime('%Y-%m-%d')
    
    
    def get_final_day_of_current_month():
    	"""获取本月最后一天"""
    	today = datetime.date.today()
    	_, last_day_num = calendar.monthrange(today.year, today.month)
    	last_day = datetime.date(today.year, today.month, last_day_num)
    	return last_day.strftime('%Y-%m-%d')
    
    
    def get_final_day_of_last_month():
    	"""获取上月最后一天,可能会跨年,需要用timedelta"""
    	today = datetime.date.today()
    	first = datetime.date(day=1, month=today.month, year=today.year)
    	final_day_of_last_month = first - datetime.timedelta(days=1)
    	return final_day_of_last_month.strftime('%Y-%m-%d')
    
    
    def get_final_day_of_current_month(year, month):
    	"""获取指定年指定月的最后一天"""
    	_, last_day_num = calendar.monthrange(year, month)
    	return last_day_num
    	# last_day = datetime.date(year, month, last_day_num)
    	# return last_day.strftime('%Y-%m-%d')
    
    

    记得帮我点赞哦!

    精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你需要的学习资料,还在等什么?快去关注下载吧!!!

    resource-introduce

    念念不忘,必有回响,小伙伴们帮我点个赞吧,非常感谢。

    我是职场亮哥,YY高级软件工程师、四年工作经验,拒绝咸鱼争当龙头的斜杠程序员。

    听我说,进步多,程序人生一把梭

    如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个鼓励,将不胜感激。

    职场亮哥文章列表:更多文章

    wechat-platform-guide-attention

    本人所有文章、回答都与版权保护平台有合作,著作权归职场亮哥所有,未经授权,转载必究!

  • 相关阅读:
    jquery的动画函数animate()讲解一
    用js来实现页面的换肤功能(带cookie记忆)
    Extjs换肤+cookie皮肤记忆功能
    jquery换肤
    bootstrap的alert提示框的关闭后再显示问题
    jquery.cookie中的操作
    CSS中设置margin:0 auto; 水平居中无效的原因分析
    jQuery 遍历 json 方法大全
    jquery.min.map 404 (Not Found)出错的原因及解决办法
    AJAX 跨域请求的解决办法:使用 JSONP获取JSON数据
  • 原文地址:https://www.cnblogs.com/CHLL55/p/14066899.html
Copyright © 2011-2022 走看看