zoukankan      html  css  js  c++  java
  • Python 时间类型及其互相转换

    1 常用的时间模块

    time是模块提供的功能是更加接近于操作系统层面的。time 模块是围绕着 Unix Timestamp 进行的。

    该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。

    import time
    
    time_str = "2020-12-31 09:30:18"
    t_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")  # 生成time_str对应的struct_time对象
    t_str = time.strftime("%Y-%m-%d %H:%M:%S", t_struct)  # 生成t_struct对应格式的字符串时间
    t_stamp = time.mktime(t_struct)  # 生成t_struct对应的时间戳
    
    print(t_struct)
    print(t_str)
    print(t_stamp)
    
    # struct_time有以下常用属性
    print(t_struct.tm_year)  # 年份
    print(t_struct.tm_mon)   # 月份
    print(t_struct.tm_mday)  # 日期
    print(t_struct.tm_wday)  # 星期
    print(t_struct.tm_hour)  # 小时
    print(t_struct.tm_min)   # 分钟
    print(t_struct.tm_sec)   # 秒钟
    

    datetime可以理解为对 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类:

    • timedelta 主要用于计算时间跨度
    • tzinfo 时区相关
    • time 只关注时间
    • date只关注日期
    • datetime 同时有时间和日期

    关系型数据库DateTime类型在python对应的类型为datetime.datetime类型

    import datetime
    
    time_stamp = 1609378218
    time_str = "2020-12-31 09:30:18"
    dd_struct = datetime.datetime.strptime(time_str,"%Y-%m-%d %H:%M:%S")  # 转化为struct_time对象
    dd_obj = datetime.datetime.fromtimestamp(time_stamp)  # 将时间戳转换为datetime
    dd_struct1 = dd_obj.timetuple()  # 将datetime对象转化为struct_time对象
    dd_str = dd_obj.strftime("%Y-%m-%d %H:%M:%S")  # 将datetime对象转化为str格式
    dd_stamp = dd_obj.timestamp()  # 将datetime对象转为时间戳
    
    print(dd_struct)
    print(dd_obj)
    print(dd_struct1)
    print(dd_str)
    print(dd_stamp)
    
    # 所有datetime下的时间类型都有timetuple()方法可以将其转化为struct_time对象,进而可以用time模块将其转换为任意类型
    
    date_obj = datetime.date(year=2020, month=12, day=31)
    time_obj = datetime.time(hour=9, minute=30, second=18)
    datetime_obj = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18)
    # datetime对象有以下常用属性
    print(datetime_obj.year)  # 年份
    print(datetime_obj.month) # 月份
    print(datetime_obj.day)   # 日期
    print(datetime_obj.hour)  # 小时
    print(datetime_obj.minute)# 分钟
    print(datetime_obj.second)# 秒种
    

    2. 常用时间类型之间的转换

    常用的时间类型有 时间戳(int/float),struct_time对象,datetime.date对象,datetime.datetime对象

    2.1 Str格式 和 时间戳

    # 使用time 由 str 转换为 时间戳
    timeStr = '2020-12-31 09:30:18'
    timeArray = time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
    timeStamp = time.mktime(timeArray)
    print(timeStamp)  # 1609378218.0
    
    # 使用datetime 由 str 转换为 时间戳
    dateArray = datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
    timeStamp = dateArray.timestamp()
    print(timeStamp)  # 1609378218.0
    
    # 使用time 由 时间戳 转换为 str
    timeStamp = 1609378218
    timeArray = time.localtime(timeStamp)
    timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    print(timeStr)  # 2020-12-31 09:30:18
    
    # 使用datetime 由 时间戳 转换为 str
    dateArray = datetime.datetime.fromtimestamp(timeStamp)
    timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
    print(timeStr)  # 2020-12-31 09:30:18
    

    2.2 datetime对象和时间戳

    # 由 时间戳 转换为 datetime对象 (转换为 str格式)
    timeStamp = 1609378218
    dateArray = datetime.datetime.fromtimestamp(timeStamp)
    timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
    print(timeStr)   # 2020-12-31 09:30:18
    
    # 使用datetime,指定utc时间,相差8小时
    timeStamp = 1609378218
    dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
    timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")
    print(timeStr)   # 2020-12-31 09:30:18
    
    # 由 datetime对象 转换为 时间戳
    dateArray = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18)
    timeStamp = dateArray.timestamp()
    print(timeStamp)  # 1609378218.0
    

    2.3 str类型转换为其他格式的str

    # 原始字符类型的时间
    ts = '2020-12-31 09:30:18'
    # 转为struct_time
    timeArray = time.strptime(ts, "%Y-%m-%d %H:%M:%S")
    # 转为其它显示格式
    timeStr = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
    print(timeStr)
    

    3. 生成特定时间

    # time获取当前时间戳
    now = int(time.time())
    print(now)
    
    # 获取当前时间对象
    timeArray = time.localtime(now)
    print(timeArray)
    
    # 获取当前时间str
    timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    print(timeStr)
    
    # datetime获取当前时间
    now = datetime.datetime.now()
    print(now)
    
    # 获取当前时间str
    timeStr = now.strftime("%Y-%m-%d %H:%M:%S")
    print(timeStr)
    
    # 获取当前时间戳
    timeStamp = now.timestamp()
    timeStamp1 = time.mktime(now.timetuple())
    print(timeStamp)
    print(timeStamp1)
    
    # 获取当天零时时间戳
    time_begin = time.mktime(datetime.date.today().timetuple())
    print(time_begin)
    
    # 当月第一天零时时间戳
    month_begin = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
    month_begin = month_begin.timestamp()
    print(month_begin)
    
    # 下月第一天零时时间戳
    month = now.month
    month = 0 if month == 12 else month
    future_mouth_first = datetime.datetime(now.year, month + 1, 1, 0, 0, 0)
    future_mouth_first = future_mouth_first.timestamp()
    print(future_mouth_first)
    
    # 当月最后一天最后一秒时间戳
    month = now.month
    month = 0 if month == 12 else month
    future_mouth_first = datetime.datetime(now.year, month + 1, 1, 23, 59, 59)
    month_end = future_mouth_first - datetime.timedelta(days=1)
    month_end = month_end.timestamp()
    print(month_end)
    
    # 上个月最后一天最后一秒时间戳
    this_month_first = datetime.datetime(now.year, now.month, 1, 23, 59, 59)
    last_month_last = this_month_first - datetime.timedelta(days=1)
    last_month_last = last_month_last.timestamp()
    print(last_month_last)
    
    
  • 相关阅读:
    并发之线程封闭与ThreadLocal解析
    并发之不可变对象
    开发者
    并发之atomicInteger与CAS机制
    并发之synchronized关键字的应用
    并发之volatile关键字
    并发研究之可见性、有序性、原子性
    并发研究之Java内存模型(Java Memory Model)
    并发研究之CPU缓存一致性协议(MESI)
    线程安全的日期处理
  • 原文地址:https://www.cnblogs.com/sablier/p/14251436.html
Copyright © 2011-2022 走看看