学习和工作经常会遇到数据库和服务器不在一个地方的情况,那么当遇到时间比较时,就会很头疼,不清楚到底相差几个小时,这篇文章就解决这个问题。
先把所有的代码贴出来:
#!/usr/bin/python3
# -*- coding: utf-8 -*-import pytz
import datetime
import time# 可以直接获取北京时间,简写
beijing_time = datetime.datetime.now(pytz.timezone('PRC'))
# 2019-05-28 16:43:37.265310+08:00# 以洛杉矶为例,获取洛杉矶当地时间
los_angeles = datetime.datetime.now(pytz.timezone('America/Los_Angeles'))
# 2019-05-28 01:43:37.266825-07:00# 获取时间差:洛杉矶时间--北京时间
# 格式化时间
los_angeles_timestamp = los_angeles.strftime('%Y-%m-%d %H:%M:%S') # 2019-05-28 01:48:04
beijing_time_timestamp = beijing_time.strftime('%Y-%m-%d %H:%M:%S') # 2019-05-28 16:48:04# 转为时间戳
now = time.strptime(beijing_time_timestamp,'%Y-%m-%d %H:%M:%S')
# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=28, tm_hour=16, tm_min=50, tm_sec=45, tm_wday=1, tm_yday=148, tm_isdst=-1)old = time.strptime(los_angeles_timestamp,'%Y-%m-%d %H:%M:%S')
# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=28, tm_hour=1, tm_min=50, tm_sec=45, tm_wday=1, tm_yday=148, tm_isdst=-1)# 时间戳相减
delta_seconds = time.mktime(now) - time.mktime(old) # 54000.0print(delta_seconds / 3600) # 15.0 个小时
有需要的同学看到代码就差不多懂了,北京和洛杉矶相差了15个小时,当然这个数据也可以百度等方式知道,但是在做项目的时候,我们会根据当前时间和数据库时间做比较,然后执行一些相关操作;假如服务器在北京,数据库在美国洛杉矶,那么你用下面的方式做比较就相差的太大了:
datetime.datetime.now() - db_time
所以要把服务器的时间转为洛杉矶时间才可以作比较:
# 获取洛杉矶当地时间
los_angeles = datetime.datetime.now(pytz.timezone('America/Los_Angeles'))
# 2019-05-28 01:43:37.266825-07:00
这个才是重点!
如果想指定加几个小时,也就是类似上面的,把洛杉矶时间变为北京时间,可以这样:
datetime.datetime.now(PST) + datetime.timedelta(hours=15)
下面提供一个函数,获取国家的时区:
# 获取中国所有时区
all_cn_city = pytz.country_timezones('cn')
# 获取美国所有时区
all_us_city = pytz.country_timezones('us')
欢迎指导!