zoukankan      html  css  js  c++  java
  • python 日期计算案例

    一、计算两个日期内的所有月

    def get_month_interval(start_str, end_str):
        start_year, start_month = list(map(int, start_str.split('-')))
        end_year, end_month = list(map(int, end_str.split('-')))
        result = []
        for year in range(start_year, end_year + 1):
            year_str = str(year)
            if year == end_year and year == start_year:  # 当前年份 =结束年份 and 当前年份 = 起始年份
                for month in range(start_month, end_month):
                    date_str = year_str + '-' + str(month)
                    result.append(date_str)
            elif year < end_year and year == start_year:  # 当前年份<结束年份 and 当前年份 = 起始年份
                for month in range(start_month, 13):
                    date_str = year_str + '-' + str(month)
                    result.append(date_str)
            elif year < end_year and year != start_year:  # 当前年份<结束年份 and 当前年份 != 起始年份
                for month in range(1, 13):
                    date_str = year_str + '-' + str(month)
                    result.append(date_str)
            else:  # 当前年份 = 结束年份 and 当前年份 != 起始年份
                for month in range(1, end_month + 1):
                    date_str = year_str + '-' + str(month)
                    result.append(date_str)
        return result
    

    测试结果如下:

    >>> get_month_interval('2015-11','2016-2')
    ['2015-11', '2015-12', '2016-1', '2016-2']
    

    二、计算两个日期之间的差值

    def get_date_diff(start_str, end_str):
        import datetime
        start = datetime.datetime.strptime(start_str, '%Y-%m-%d %H:%M:%S.%f')
        end = datetime.datetime.strptime(end_str, '%Y-%m-%d %H:%M:%S.%f')
        diff = end - start
        # 相差天数
        print('相差天数:', diff.days)
        # 相差秒数
        print('相差秒数:', diff.seconds)
        # 相差微秒数
        print('相差微秒数:', diff.microseconds)
    

    测试结果如下:

    >>> get_date_diff('2016-1-25 23:59:59.100','2016-2-27 22:58:58.50')
    相差天数: 32
    相差秒数: 82739
    相差微秒数: 400000
    

    三、计算当前时间延后指定时间的日期

    >>> compute_date(days=1,weeks=2)
    2016-11-19 15:24:41.203940
    2016-12-04 15:24:41.203940

    测试结果如下:

    #计算经过两周一天之后的日期
    >>> compute_date(days=1,weeks=2)
    2016-11-19 15:24:41.203940
    2016-12-04 15:24:41.203940
    

    四、其他

    # 把UTC时间转本地时间

    from datetime import datetime from dateutil import tz # METHOD 1: Hardcode zones: from_zone = tz.gettz('UTC') to_zone = tz.gettz('America/New_York') # METHOD 2: Auto-detect zones: from_zone = tz.tzutc() to_zone = tz.tzlocal() # utc = datetime.utcnow() utc = datetime.strptime('2011-01-21 02:37:21', '%Y-%m-%d %H:%M:%S') # Tell the datetime object that it's in UTC time zone since # datetime objects are 'naive' by default utc = utc.replace(tzinfo=from_zone) # Convert time zone central = utc.astimezone(to_zone)

      

    五、时间日期格式化符号

    %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)
    %f  毫秒(小数点后6位)


    %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 当前时区的名称
    %% %号本身

    六、相关模块

    datetime模块

    •datetime.date:表示日期的类。常用的属性有year, month, day; 
    •datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond; 
    •datetime.datetime:表示日期时间。 
    •datetime.timedelta:表示时间间隔,即两个时间点之间的长度。 
    •datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册) 
    注:上面这些类型的对象都是不可变(immutable)的。 

    date类 
    date类表示一个日期。日期由年、月、日组成(地球人都知道~~)。date类的构造函数如下: 

    class datetime.date(year, month, day):参数的意义就不多作解释了,只是有几点要注意一下: 

    •year的范围是[MINYEAR, MAXYEAR],即[1, 9999]; 
    •month的范围是[1, 12]。(月份是从1开始的,不是从0开始的~_~); 
    •day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天; 
    date类定义了一些常用的类方法与类属性,方便我们操作: 

    •date.max、date.min:date对象所能表示的最大、最小日期; 
    •date.resolution:date对象表示日期的最小单位。这里是天。 
    •date.today():返回一个表示当前本地日期的date对象; 
    •date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象; 
    •datetime.fromordinal(ordinal):将Gregorian日历时间转换为date对象;(Gregorian Calendar:一种日历表示方法,类似于我国的农历,西方国家使用比较多,此处不详细展开讨论。) 

    date提供的实例方法和属性: 

    •date.year、date.month、date.day:年、月、日; 
    •date.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) 
    •date.timetuple():返回日期对应的time.struct_time对象; 
    •date.toordinal():返回日期对应的Gregorian Calendar日期; 
    •date.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; 
    •data.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推; 
    •date.isocalendar():返回格式如(year,month,day)的元组; 
    •date.isoformat():返回格式如'YYYY-MM-DD'的字符串; 
    •date.strftime(fmt):自定义格式化字符串。在下面详细讲解。 

    有志者,事竟成!
  • 相关阅读:
    看动画学算法之:栈stack
    asp.net core使用identity+jwt保护你的webapi(三)——refresh token
    asp.net core使用identity+jwt保护你的webapi(二)——获取jwt token
    与 Python 之父聊天:更快的 Python!
    Oracle使用SPM对含有绑定变量SQL做固定的方法
    Oracle Hint no_merge(merge)、no_unnest(unnest)的作用对象陷阱
    Oracle全表扫描导致的direct path read第一次慢第二次以后变快
    Oracle OEM13C添加主机监控遇到一些问题汇总
    还傻傻分不清楚equals和==的区别吗?看完就明白了
    从0到1实现一个简单计算器
  • 原文地址:https://www.cnblogs.com/styier/p/6080669.html
Copyright © 2011-2022 走看看