python自动获取北京时间_python将当前服务器的时区时间转为北京时间

python基于北京时间来运营的例子

# coding:utf-8

# @Author: zlq

"""

这个例子是基于北京时间来运营的

以北京时间为准, 不以服务器的当地时间为准, 这样方便运营

在线国际时区转换在线计算器:http://www.osgeo.cn/app/sc627

"""

"""

这个例子是以北京时间为准,存入数据库的是将本地时间转为北京东八区的时间戳,

然后展示的是显示本地时间, 相互对比的是从数据库拿出北京东八区的时间戳和当前时区

的时间戳转为北京东八区时间戳来对比,来计算有效时间

"""

# UTC时间转本地时间(+8:00)

def utc2local(utc_st):

now_stamp = time.time()

local_time = datetime.fromtimestamp(now_stamp)

utc_time = datetime.utcfromtimestamp(now_stamp)

offset = local_time - utc_time

local_st = utc_st + offset

return local_st

# 本地时间转UTC时间(-8:00)

def local2utc(local_st):

time_struct = time.mktime(local_st.timetuple())

utc_st = datetime.utcfromtimestamp(time_struct)

return utc_st

# 字符串形式日期转换为时间戳

def str2timestamp(date, format_str="%Y-%m-%d", zone=None):

"""

字符串形式日期转换为时间戳 ,默认格式"%Y-%m-%d"

转换出错默认返回 0

"""

timeArray = time.strptime(date, format_str)

if zone:

tz = timezone(zone)

y, m, d, H, M, S = timeArray[0:6]

dt = datetime(y, m, d, H, M, S)

t = tz.localize(dt)

t = t.astimezone(pytz.utc)

return int(time.mktime(t.utctimetuple())) - time.timezone

return int(time.mktime(timeArray))

def format_timestamp(timestamp, format_str='%Y-%m-%d %H:%M:%S', zone=None):

"""

unixtime 时间 转 字符串

默认:%Y-%m-%d %H:%M:%S

"""

if timestamp is None or not timestamp:

return ''

if format_str is 'isodate':

format_str = '%Y-%m-%d %H:%M:%S'

elif format_str in ('date', 'shortdate', 'short-date'):

format_str = '%Y-%m-%d'

elif format_str is 'time':

format_str = '%H:%M:%S'

if zone:

tz = timezone(zone)

t = pytz.utc.localize(datetime.utcfromtimestamp(timestamp))

t = t.astimezone(tz)

return t.strftime(format_str)

return datetime.fromtimestamp(timestamp).strftime(format_str)

# 服务器当前日期时间的时间戳和北京东八区对比, 就可以根据时间戳大小来

# 对比有效时间了, 这个结果是转为了现在北京东八区的时间戳。就可以拿这个结果

# 和预先存到数据库的北京东八区时间戳对比来返回有效链接了

def local_timezone_now_timestamp_compare_beijing():

# 相互对比的是从数据库拿出北京东八区的时间戳和当前时区

# 的时间戳转为北京东八区时间戳来对比

# 以时间戳形式判断。在当前时间段往回遍历生效链接,离现在最近的时间戳,

# 最终取得列表最大者就是离现在最近的时间戳,前端展示最近生效时间的链接

timezone_beijing = 'Asia/Shanghai'

beijing_datetime =format_timestamp(time.time(),

format_str="%Y-%m-%d %H:%M:%S",

zone=timezone_beijing)

# # 东八区

now_beijing_timestamp = str2timestamp(beijing_datetime,

format_str="%Y-%m-%d %H:%M:%S",

zone=timezone_beijing)

return now_beijing_timestamp

# 将通过页面设置的有效时间,转为东八区北京时间的时间戳,就可以保存到数据库了

def save_database_beijing_timstamp(effective_time_str):

"""

:param effective_time_str: "2018-06-19 19:22:24"

:return:

"""

timezone_beijing = 'Asia/Shanghai'

# 东八区

beijing_timestamp = str2timestamp(effective_time_str,

format_str="%Y-%m-%d %H:%M:%S",

zone=timezone_beijing)

return beijing_timestamp

# 将返回结果,展示到前端页面为北京时间

def show_frontweb_beijing_timedate(effective_timestamp):

"""

:param effective_timestamp: 1529525344

:return:

"""

timezone_beijing = "Asia/Shanghai"

effective_time_str = format_timestamp(effective_timestamp,

format='%Y-%m-%d %H:%M:%S',

zone=timezone_beijing)

return effective_time_str

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值