python3:时间获取与操作

原创文章,转载请注明出处

一.术语解释

1. 时间戳

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

2. UTC

协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。

3. DST

DST是Daylight Saving Time的缩写,称为阳光节约时,在我国称为夏时制,又称夏令时,是一种为节约能源而人为调整地方时间的制度。

4. 格式化日期

将时间按照一定的格式进行格式化。
例如:格式化成2016-03-20 11:45:39形式、格式化成Sat Mar 28 22:24:24 2016形式

5. 时间元组

很多Python函数用一个元组装起来的9组数字处理时间:time.struct_time(tm_year=2019, tm_mon=4, tm_mday=26, tm_hour=17, tm_min=4, tm_sec=4, tm_wday=4, tm_yday=116, tm_isdst=0)


python3:时间获取与操作_第1张图片
image.png

二. 时间戳

1. 获取当前时间戳

import time

def get_timestamp():
    """
    获取当前时间戳
    :return:1556274213.430633
    """
    return time.time()

输出结果:1556274213.430633

2. 时间戳和UTC时间相互转换

import datetime
import pytz

def timestamp_to_utc(timestamp):
    """
    时间戳转换为utc时间
    :param timestamp:
    :return: 2019-04-26 16:12:58
    """
    return datetime.datetime.utcfromtimestamp(timestamp).isoformat()

def utc_to_timestamp(utc, utc_format='%Y-%m-%dT%H:%M:%S'):
    """
    utc时间转换为时间戳
    :param utc: utc时间
    :param utc_format: utc时间格式
    :return:时间戳:1556294670
    """

    # 定义本地时区
    local_tz = pytz.timezone('Asia/Shanghai')

    # 将utc时间的格式转化为datetime.datetime格式
    utc_dt = datetime.datetime.strptime(utc, utc_format)

    # 将datetime格式添加上世界时区,然后astimezone切换时区:世界时区==>本地时区
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)

    # 转换为时间元组
    timetuple = local_dt.timetuple()

    return int(time.mktime(timetuple))

3. 时间戳和格式化日期相互转换

import time

def timestamp_to_formattime(timestamp):
    """
    时间戳转换为格式化时间
    :param timestamp:时间戳
    :return: 格式化时间
    """
    return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))

def formattime_to_timestamp(formattime, format='%Y-%m-%d %H:%M:%S'):
    """
    格式化时间转换为时间戳
    :param formattime: 格式化时间
    :return: 时间戳
    """
    return time.mktime(time.strptime(formattime, format))

4. 时间戳和时间元组相互转换

import time

def timestamp_to_timetuple(timestamp):
    """
    时间戳转时间元组
    :param timestamp:
    :return: time.struct_time(tm_year=2019, tm_mon=4, tm_mday=26, tm_hour=17, tm_min=4, tm_sec=4, tm_wday=4, tm_yday=116, tm_isdst=0)
    """
    return time.localtime(timestamp)

def timetuple_to_timestamp():
    """
    时间元组转换为时间戳
    :return: 时间戳:1556273828.0
    """
    # 获取当前时间元组
    tuple = time.localtime()
    return time.mktime(tuple)

timestamp_to_timetuple()输出结果:time.struct_time(tm_year=2019, tm_mon=4, tm_mday=26, tm_hour=17, tm_min=4, tm_sec=4, tm_wday=4, tm_yday=116, tm_isdst=0)
timetuple_to_timestamp()输出结果:1556273828.0

三. UTC

1. 获得当前的utc标准时间

import datetime

def get_utc():
    """
    获得当前的utc标准时间
    :return: 2019-04-26 16:04:30.196205
    """
    return datetime.datetime.utcnow()

def get_ISO_utc():
    """
    获取当前utc时间的ISO格式
    :return: 2019-04-26T16:04:30.196441
    """
    return datetime.datetime.utcnow().isoformat()

def get_ISO_utc_2():
    """
    获取当前utc时间的ISO格式:utc_format='%Y-%m-%dT%H:%M:%S'
    :return: 2019-04-26T16:04:30
    """
    return str(datetime.datetime.utcnow().isoformat())[0: -7]

2. utc时间和格式化时间相互转换

import time
import datetime
import pytz


def utc_to_formattime(utc, utc_format='%Y-%m-%dT%H:%M:%S'):
    """
    utc转换为格式化时间
    :param utc:
    :param utc_format:
    :return:
    """
    # 定义本地时区
    local_tz = pytz.timezone('Asia/Shanghai')

    # 将utc时间的格式转化为datetime.datetime格式
    utc_dt = datetime.datetime.strptime(utc, utc_format)

    # 将datetime格式添加上世界时区,然后astimezone切换时区:世界时区==>本地时区
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)

    # 转换为时间元组
    timetuple = local_dt.timetuple()

    # 转换为时间戳
    timestamp = int(time.mktime(timetuple))

    return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))


def formattime_to_utc():
    """
    格式化时间转换为utc时间
    :return:
    """
    # 获取当前时间
    formattime = time.strftime("%Y-%m-%d %H:%M:%S")

    # 转换为时间戳
    timestamp = time.mktime(time.strptime(formattime, '%Y-%m-%d %H:%M:%S'))

    return datetime.datetime.utcfromtimestamp(timestamp).isoformat()

3. utc时间和时间元组相互转换

import time
import datetime
import pytz


def timetuple_to_utc():
    """
    时间元组转换为utc时间
    :param timestamp:
    :return: 2019-04-26 16:12:58
    """
    tuple = time.localtime()
    timestamp = time.mktime(tuple)
    return datetime.datetime.utcfromtimestamp(timestamp).isoformat()


def utc_to_timetuple(utc, utc_format='%Y-%m-%dT%H:%M:%S'):
    """
    utc时间转换为时间元组
    :param utc: utc时间
    :param utc_format: utc时间格式
    :return:时间元组:time.struct_time(tm_year=2019, tm_mon=4, tm_mday=28, tm_hour=13, tm_min=35, tm_sec=7, tm_wday=6, tm_yday=118, tm_isdst=0)
    """

    # 定义本地时区
    local_tz = pytz.timezone('Asia/Shanghai')

    # 将utc时间的格式转化为datetime.datetime格式
    utc_dt = datetime.datetime.strptime(utc, utc_format)

    # 将datetime格式添加上世界时区,然后astimezone切换时区:世界时区==>本地时区
    local_dt = utc_dt.replace(tzinfo=pytz.utc).astimezone(local_tz)

    return local_dt.timetuple()

四. DST

1. 检查当前时间是否为夏令时

def check_dst():
    """
    检查当前时间是否为夏令时
    :return:True:当前时间是夏令时;False:当前时间不是夏令时
    """
    import time
    return bool(time.localtime().tm_isdst)

五. 格式化日期

1. 获取当前时间

def get_now_time_1():
    """
    方式一:获取当前时间
    :return:
    """
    import time
    return time.strftime("%Y-%m-%d %H:%M:%S")

def get_now_time_2():
    """
    方式二:获取当前时间
    :return:
    """
    import time
    return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

def get_now_time_3():
    """
    方式三:获取当前时间
    :return:
    """
    import datetime
    return datetime.datetime.today()

def get_now_time_4():
    """
    方式四:获取当前时间
    :return:
    """
    import datetime
    return datetime.datetime.now()

2. 获取距离当前日期的指定时间的日期

def get_specified_date(days: int):
    """
    获取距离当前日期的指定日期
    :param days: 日期间隔
    :return:
    """
    import datetime
    today = datetime.date.today()

    return (today + datetime.timedelta(days=days)).strftime("%Y-%m-%d")

获取明天的日期:get_specified_date(1)
获取昨天的的日期:get_specified_date(-1)

除此之外,timedelta()方法还可以获取指定如下时间间隔的日期:

days: float = ..., 
seconds: float = ...,
microseconds: float = ...,
milliseconds: float = ..., 
minutes: float = ..., 
hours: float = ...,
weeks: float = ...

3. 计算日期时间差

from dateutil.parser import parse

def get_time_between(start_time: '%Y-%m-%d %H:%M:%S', end_time: "%Y-%m-%d %H:%M:%S"):
    """
    计算两个日期之间的相差天数和总秒数
    :param start_time: 
    :param end_time: 
    :return: 
    """

    days = (parse(start_time) - parse(end_time)).days
    total_seconds = (parse(start_time) - parse(end_time)).total_seconds()

    return days, total_seconds

六. 时间元组

1. 获取当前时间元组

import time

def get_timetuple():
    """
    获取当前时间元组
    :return:time.struct_time(tm_year=2019, tm_mon=4, tm_mday=26, tm_hour=18, tm_min=21, tm_sec=40, tm_wday=4, tm_yday=116, tm_isdst=0)
    """
    return time.localtime()

输出结果:time.struct_time(tm_year=2019, tm_mon=4, tm_mday=26, tm_hour=18, tm_min=21, tm_sec=40, tm_wday=4, tm_yday=116, tm_isdst=0)

2. 时间元组和字符串相互转换

import time

def timetuple_to_str():
    """
    时间元组转换为字符串
    :return: 2019年04月26日 18时27分03秒
    """
    tuple = time.localtime()
    return time.strftime("%Y{y}%m{m}%d{d} %H{h}%M{m1}%S{s}", tuple).format(y="年", m="月", d="日", h="时", m1="分", s="秒")

def str_to_timetuple():
    """
    字符串转换为时间元组
    :return: time.struct_time(tm_year=2018, tm_mon=4, tm_mday=26, tm_hour=18, tm_min=27, tm_sec=3, tm_wday=3, tm_yday=116, tm_isdst=-1)
    """
    return time.strptime("2018年04月26日 18时27分03秒", "%Y{y}%m{m}%d{d} %H{h}%M{m1}%S{s}".format(y="年", m="月", d="日", h="时", m1="分", s="秒"))

timetuple_to_str()输出结果:2019年04月26日 18时27分03秒
str_to_timetuple()输出结果:time.struct_time(tm_year=2018, tm_mon=4, tm_mday=26, tm_hour=18, tm_min=27, tm_sec=3, tm_wday=3, tm_yday=116, tm_isdst=-1)

你可能感兴趣的:(python3:时间获取与操作)