• python 时间模块(time ,datetime,calendar)


      Python中提供了时间相关的内置模块,我们主要用的是:time模块、datetime模块和calendar模块

    ⽇期格式化的标准:

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

    一、时间相关的术语

    • UTC time Coordinated Universal Time,世界协调时,又称 格林尼治天文时间、世界标准时间。与UTC time对应的是各个时区的local time,东N区的时间比UTC时间早N个小时,因此UTC time + N小时 即为东N区的本地时间;而西N区时间比UTC时间晚N个小时,即 UTC time - N小时 即为西N区的本地时间; 中国在东8区,因此比UTC时间早8小时,可以以UTC+8进行表示。

    • epoch time 表示时间开始的起点;它是一个特定的时间,不同平台上这个时间点的值不太相同,对于Unix而言,epoch time为 1970-01-01 00:00:00 UTC。

    • timestamp(时间戳) 也称为Unix时间 或 POSIX时间;它是一种时间表示方式,表示从格林尼治时间1970年1月1日0时0分0秒开始到现在所经过的毫秒数,其值为float类型。 但是有些编程语言的相关方法返回的是秒数(Python就是这样),这个需要看方法的文档说明。需要说明的是时间戳是个差值,其值与时区无关。

    一、time模块

      1、时间戳(timestamp):时间戳使用的是从1970年01月01日 00点00分00秒到现在一共经过了多少秒。。。使用的是float来表示。

    import time
    # time.time() 表示时间戳
    s=time.time()#1542167172.0260832  数据库中存储采用的是这种时间

      2、格式化时间(strftime):这个时间主要可以把时间进行任意的格式化输出。

    import time
    s2=time.strftime("%Y-%m-%d  %H:%M:%S") #2018-11-14  19:27:47

      3、结构化时间(struct_time):这个时间主要可以把时间分类划分。

    time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=12, tm_min=3, tm_sec=9, tm_wday=2, tm_yday=318, tm_isdst=0)

      4、三种时间之间的转换

      时间戳 -> 结构化时间:time.localtime( 时间戳)、time.gmtime( 时间戳)

    import time
    s=time.localtime(18888888) #时区问题  gmtime :格林尼治时间
    # time.struct_time(tm_year=1970, tm_mon=8, tm_mday=7, 
    # tm_hour=22, tm_min=54, tm_sec=48, tm_wday=4, tm_yday=219, tm_isdst=0)

      结构化时间 -> 格式化时间:time.strftime(时间格式,结构化时间)

    import time
    s=time.localtime()
    s2=time.strftime("%Y-%m-%d %H:%M:%S",s)
    print(s2) #2018-11-14 19:47:30

      格式化时间 ->结构化时间:time.strptime(格式化时间,相应的格式字符串)

    import time
    s1="1995-3-15 03:29:37"
    struct_s1=time.strptime(s1,"%Y-%m-%d %H:%M:%S")
    print(struct_s1)
    #time.struct_time(tm_year=1995, tm_mon=3, tm_mday=15, #tm_hour=3, tm_min=29, tm_sec=37, tm_wday=2, tm_yday=74, #tm_isdst=-1)

      结构化时间 -> 时间戳:time.mktime(结构化时间)

    import time
    s=time.localtime()
    s2=time.mktime(s)
    print(s2)#1542196252.0

      5、时间差的计算  

    计算时间差
    # 假定给两个时间
    import time
    s1="2017-9-20 03:29:37"
    s2="2018-3-15 12:3:55"
    # # 格式化时间 -> 结构化时间
    struct_s1=time.strptime(s1,"%Y-%m-%d %H:%M:%S")
    struct_s2=time.strptime(s2,"%Y-%m-%d %H:%M:%S")
    # 结构化时间 -> 时间戳
    s1_chou=time.mktime(struct_s1)
    s2_chou=time.mktime(struct_s2)
    time_cha=abs(s2_chou-s1_chou)
    # 时间戳-> 结构化时间
    new_time=time.gmtime(time_cha)
    # time.struct_time(tm_year=1996, tm_mon=7, tm_mday=29, tm_hour=17, tm_min=1, tm_sec=19, tm_wday=0, tm_yday=211, tm_isdst=0)
    y_cha=new_time.tm_year-1970
    m_cha=new_time.tm_mon-1
    d_cha=new_time.tm_mday-1
    H_cha=new_time.tm_hour
    M_cha=new_time.tm_min
    S_cha=new_time.tm_sec
    print("两个时间相隔 %s 年 %s 月 %s 日 %s 时 %s 分 %s 秒"% (y_cha,m_cha,d_cha,H_cha,M_cha,S_cha))
    
    import time
    true_time=time.mktime(time.strptime('2017-09-11 08:30:00','%Y-%m-%d %H:%M:%S'))
    time_now=time.mktime(time.strptime('2017-09-12 11:00:00','%Y-%m-%d %H:%M:%S'))
    dif_time=time_now-true_time
    struct_time=time.gmtime(dif_time)
    print(struct_time)
    print('过去了%d年%d⽉%d天%d⼩时%d分钟%d秒'%(struct_time.tm_year-1970,struct_time.tm_mon-1,struct_time.tm_mday-1,struct_time.tm_hour,struct_time.tm_min,struct_time.tm_sec))
    #

      利用时间戳计算时、分、秒

    hours=dif_time//3600
    minute=dif_time%3600//60
    secend=dif_time%3600%60
    
    print("过去了 %s 小时 %s 分钟 %s秒"%(hours,minute,secend))

    二、datetime模块

    • date 类(记住这一个)
    date类有三个参数,datetime.date(year,month,day),返回year-month-day

      需要的时候再看这里

    1.datetime.date.ctime(),返回格式如 Sun Apr 16 00:00:00 2017
    
    2.datetime.date.fromtimestamp(timestamp),根据给定的时间戮,返回一个date对象;datetime.date.today()作用相同
    
    3.datetime.date.isocalendar():返回格式如(year,month,day)的元组,(2017, 15, 6)
    
    4.datetime.date.isoformat():返回格式如YYYY-MM-DD
    
    5.datetime.date.isoweekday():返回给定日期的星期(0-6),星期一=0,星期日=6
    
    6.datetime.date.replace(year,month,day):替换给定日期,但不改变原日期
    
    7.datetime.date.strftime(format):把日期时间按照给定的format进行格式化。
    
    8.datetime.date.timetuple():返回日期对应的time.struct_time对象
    
      time.struct_time(tm_year=2017, tm_mon=4, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=105, tm_isdst=-1)
    
    9.datetime.date.weekday():返回日期的星期
    • time类 (记住这一个)
    datetime.time(hour,minute,second,microsecond,tzoninfo),返回08:29:30

      有需求再看

    1.datetime.time.replace()
    
    2.datetime.time.strftime(format):按照format格式返回时间
    
    3.datetime.time.tzname():返回时区名字
    
    4.datetime.time.utcoffset():返回时区的时间偏移量

    三、calendar模块

      1、calendar.calendar(year,w=2,l=1,c=6) 返回某年的日历,每日宽度w字符,每行21*w+8+2*c,i表示星期

      2、calendar.firstweekday( )  返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

      3、calendar.isleap(year) 判断是否为润年

      4、calendar.leapdays(y1,y2)  返回[y1, y2)润年总数

      5、calendar.month(year,month,w=2,l=1) 返回某年某月的的日历

      6、calendar.monthcalendar(year,month) 返回某年某月日历,以列表形式显示

      7、calendar.setfirstweekday(weekday)   设置每周的起始日期码。0(星期一)到6(星期日)。

      8、calendar.timegm(tupletime)  和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍

                 (1970纪元后经过的浮点秒数)。

      9、calendar.weekday(year,mouth,day) 返回星期码,0表示星期1

  • 相关阅读:
    sqlserver中自定义函数+存储过程实现批量删除
    javascript的词法分析
    struts2 OGNL(Object-Graph Navigation Language) 井号,星号,百分号
    SimpleAdapter
    IntentService源码分析
    Service 的 onStartCommand(Intent, int, int) 返回值
    AppFog使用
    Looper分析。ThreadLocal有关
    HandlerThread分析
    form表单的enctype属性
  • 原文地址:https://www.cnblogs.com/angle6-liu/p/9960033.html
Copyright © 2020-2023  润新知