Python 时间转换(时间戳、格式化时间)

背景故事

在日常工作中经常会遇到 python 时间格式转换问题,如时间戳转换为格式化时间、格式化时间转换为时间戳,这里做个总结。

在总结之前我们需要先弄清楚一个关键点:时区

  • 时区:我们通常使用的时区一般分为 UTC时间和 UTC+8 (东八)时间,东八 CT — 中国标准时间 简单理解为中国时间,UTC WET — 欧洲西部时区,GMT - 格林威治标准时间,简单理解为英国时间。东八时间比 UTC 时间快八小时。

  • 世界时区图

在这里插入图片描述

格式化时间转化为时间戳

获取本地(东八)时间戳


import time

import pytz

import datetime

# 返回 东八 时间戳

def get_shanghai_timestamp(date_time):

        time_zone = pytz.timezone('Asia/Shanghai')

        timeArray = datetime.datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S")

        local_dt = timeArray.astimezone(time_zone)

        print('>>>', int(time.mktime(local_dt.timetuple())))

get_timestamp('2018-07-13 16:00:00')

获取 UTC 时间戳


import time

import pytz

import datetime

# 返回 utc 时间戳

def get_utc_timestamp(utc_time_str, utc_format=r'%Y-%m-%d %H:%M:%S'):

    local_tz = pytz.timezone('UTC')      # 定义本地时区(东八时间比 utc 时间快8小时)

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

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

    return int(time.mktime(local_dt.timetuple()))                      #返回当地时间戳

print(get_utc_timestamp('2018-07-13 16:00:00', utc_format='%Y-%m-%d %H:%M:%S'))

时间戳转换为格式化时间

返回东八格式化时间


# 方式一:

import time

import pytz

import datetime

def get_local_format_time(timestamp):

  local_time=time.localtime()

  format_time=time.strftime("%Y-%m-%d %H:%M:%S", local_time)

  return format_time

get_local_format_time(1529112900)

# 方式二:

def local_to_utc(local_ts, time_format=r'%Y-%m-%d %H:%M:%S'):

time_zone = pytz.timezone('Asia/Shanghai')

    time_str = time.strftime(time_format, time.localtime(local_ts))    #首先将本地时间戳转化为时间元组,用strftime格式化成字符串

    dt = datetime.datetime.strptime(time_str, time_format)            #将字符串用strptime 转为为datetime中 datetime格式

    utc_dt = dt.astimezone(time_zone)                                    # astimezone切换为 utc 时区

    return utc_dt.strftime(time_format)                                  #返回 utc 格式化时间

get_local_format_time(1529112900)

返回 UTC 格式化时间


def get_utc_format_time(local_ts, time_format=r'%Y-%m-%d %H:%M:%S'):

    time_str = time.strftime(time_format, time.localtime(local_ts))    #首先将本地时间戳转化为时间元组,用strftime格式化成字符串

    dt = datetime.datetime.strptime(time_str, time_format)            #将字符串用strptime 转为为datetime中 datetime格式

    utc_dt = dt.astimezone(pytz.utc)                                    # astimezone切换为 utc 时区

    return utc_dt.strftime(time_format)                                  #返回 utc 格式化时间

get_utc_format_time(1529112900)

你可能感兴趣的:(Python 时间转换(时间戳、格式化时间))