美文网首页
日期型时间数据处理1

日期型时间数据处理1

作者: 晨光523152 | 来源:发表于2019-07-08 16:21 被阅读0次

    日期时间数据类型和工具

    常用的时间表现形式:时间戳,格式化的时间字符串,Python中的time模块的time.struct_time,datetime模块的datetime类。
    Python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。
    datetime官方文档:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior
    time官方文档:https://docs.python.org/zh-cn/3/library/time.html#module-time
    calendar官方文档:https://docs.python.org/zh-cn/3/library/calendar.html#module-calendar

    相关术语的解释

    • UTC(Coordinated Universal Time):世界协调时,又称格林尼治天文时间/世界标准时间。与UTC相对应地是各个时区里的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.struct_time

    time.struct_time包含如下属性:


    time.struct_time属性

    属性值获取方式有两种:

    • 把它当做一种特殊的有序不可变序列通过下标/索引获取各个元素的值,如t[0];
    • 通过.属性名 的方式来获取各个元素的值,如t.tm_year。
      需要注意的是:struct_time实例的各个属性都是只读的,不可修改。

    time模块

    time模块主要用于时间访问和转换,这个模块提供了各种与时间相关的函数。


    time函数1
    time函数2
    • 获取时间戳格式的时间数据
    t1 = time.time()
    print(t1)
    

    结果:

    1562568773.8972986
    
    • 获取struct_time格式的时间
    t2 = time.localtime()
    print(t2)
    year = t2[0]
    month = t2[1]
    day = t2[3]
    hour = t2[4]
    minute = t2[5]
    second = t2[6]
    

    结果是:

    time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=14, tm_min=55, tm_sec=3, tm_wday=0, tm_yday=189, tm_isdst=0)
    2019
    7
    14
    55
    3
    0
    
    • 获取字符串格式的时间
    t3 = time.ctime()
    print(t3)
    t4 = time.asctime()
    print(t4)
    

    结果是:

    Mon Jul  8 14:58:36 2019
    Mon Jul  8 14:58:53 2019
    
    • 时间戳格式转struct_time格式时间
    t5 = time.time()
    print(t5)
    t6 = time.localtime(t5)
    print(t6)
    t7 = time.gmtime(t5)
    print(t7)
    t8 = time.struct_time(t6)
    print(t8)
    

    结果是:

    1562569462.8396223
    time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=15, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
    time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=7, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
    time.struct_time(tm_year=2019, tm_mon=7, tm_mday=8, tm_hour=15, tm_min=4, tm_sec=22, tm_wday=0, tm_yday=189, tm_isdst=0)
    

    需要注意的是,time.localtime()输入参数是时间戳,time.gmtime()输入参数是struct_time。

    • 字符串格式时间转成struct_time格式时间
    a = time.strptime('Sat Feb 04 14:06:42 2017')
    print(a)
    b = time.strptime('Sat Feb 04 14:06:42 2017', '%a %b %d %H:%M:%S %Y')
    print(b)
    c = time.strptime('2017-01-13 17:07','%Y-%m-%d %H:%M')
    print(c)
    d = time.strptime('2017/01/12 17:07','%Y/%m/%d %H:%M')
    print(d)
    e = time.strptime('201702041412','%Y%m%d%H%M')
    print(e)
    f = time.strptime('20170204','%Y%m%d')
    print(f)
    year1 = f[0]
    month1 = f[1]
    day1 = f[2]
    wday1 = f[6]
    print(year1)
    print(month1)
    print(day1)
    print(wday1)
    

    结果是:

    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=6, tm_sec=42, tm_wday=5, tm_yday=35, tm_isdst=-1)
    time.struct_time(tm_year=2017, tm_mon=1, tm_mday=13, tm_hour=17, tm_min=7, tm_sec=0, tm_wday=4, tm_yday=13, tm_isdst=-1)
    time.struct_time(tm_year=2017, tm_mon=1, tm_mday=12, tm_hour=17, tm_min=7, tm_sec=0, tm_wday=3, tm_yday=12, tm_isdst=-1)
    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
    time.struct_time(tm_year=2017, tm_mon=2, tm_mday=4, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=35, tm_isdst=-1)
    2017
    2
    4
    5
    
    • struct_time格式时间转字符串格式时间
    g = time.strftime('%Y-%m-%d %H:%M',time.localtime())
    print(g)
    

    结果是:

    2019-07-08 15:27
    
    • 时间戳格式时间转字符串格式时间
    h = time.mktime(time.localtime())
    print(h)
    

    结果是:

    1562571907.0
    

    这是博客上的时间格式转换过程图:


    image.png

    但是,感觉在我处理过程中我都会转成struct_time格式,因为这样我才能够导出year,month,day,hour,minute,second,wday的值。

    所以我都转换过程图如下所示(使用XMind画): 日期时间型数据处理

    参考资料:

    https://www.jb51.net/article/105840.htm
    https://zhuanlan.zhihu.com/p/28209870
    https://blog.csdn.net/xiaobing_blog/article/details/12591917
    https://blog.csdn.net/LY_ysys629/article/details/73822716
    https://www.cnblogs.com/jfl-xx/p/8024596.html

    相关文章

      网友评论

          本文标题:日期型时间数据处理1

          本文链接:https://www.haomeiwen.com/subject/sbpohctx.html