方法一

from datetime import datetime
from pytz import timezone cst_tz = timezone('Asia/Shanghai')
utc_tz = timezone('UTC')
pst_tz = timezone('America/Los_Angeles') day = datetime.strptime('2020-12-11 20:00:00', '%Y-%m-%d %H:%M:%S') aa = day.astimezone(tz=cst_tz).strftime('%Y-%m-%d %H:%M:%S')
bb = day.astimezone(tz=pst_tz).strftime('%Y-%m-%d %H:%M:%S')
cc = day.astimezone(tz=utc_tz).strftime('%Y-%m-%d %H:%M:%S')
print('北京时间:', aa)
print('太平洋时间:', bb)
print('utc时间:', cc)

方法二

import calendar
from datetime import datetime, date, timedelta MARKETPLACES = {'US': 'NA',
'CA': 'NA',
'JP': 'FE',
'AU': 'FE',
'UK': 'EU',
'FR': 'EU',
'IT': 'EU',
'ES': 'EU',
'DE': 'EU',
'AE': 'EU',
} def get_weekday(datetime_obj, week_day="monday"):
"""
获取指定时间的当周的星期x
:param datetime_obj: 时间
:param week_day: 指定的星期x
:return:
"""
d = dict(zip(("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"),
range(7))) # datetime 模块中,星期一到星期天对应数字 0 到 6
delta_hour = timedelta(days=1) # 改变幅度为 1 天
while datetime_obj.weekday() != d.get(week_day):
if datetime_obj.weekday() > d.get(week_day):
datetime_obj -= delta_hour
elif datetime_obj.weekday() < d.get(week_day):
datetime_obj += delta_hour
else:
pass
return datetime_obj def get_month_weekday(year, month, n=1, w="sunday", h=0):
"""
获取 year 年,month 月的的第n个星期w和倒数第n个星期w的日期
:param year: 指定年份,
:param month: 指定月份
:param n: n个或者倒是n个
:param w: 指定的星期w
:param h: 指定的小时
:return:
"""
# 获取第一和最后一天
d = dict(zip(("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"),
range(7))) # datetime 模块中,星期一到星期天对应数字 0 到 6
weekday, count_day = calendar.monthrange(year=year, month=month) # 返回指定月份1号的星期几,和本月的总天数
first_day = datetime(year=year, month=month, day=1, hour=h) # <type 'datetime.datetime'>
last_day = datetime(year=year, month=month, day=count_day, hour=h) if n > 0:
n = abs(n)
if first_day.weekday() > d.get(w): # 说明本周的星期w在上个月
datetime_obj = first_day + timedelta(weeks=1)
else:
datetime_obj = first_day
datetime_obj += timedelta(weeks=n - 1)
weekday_day = get_weekday(datetime_obj=datetime_obj, week_day=w)
else:
n = abs(n)
if last_day.weekday() < d.get(w): # 说明本周的星期w在下一个月
datetime_obj = last_day - timedelta(weeks=1)
else:
datetime_obj = last_day
datetime_obj -= timedelta(weeks=n - 1)
weekday_day = get_weekday(datetime_obj=datetime_obj, week_day=w) return weekday_day def is_dst(dt, region):
"""
"UK","DE","FR","ES","IT" 夏令时 取3月份的最后一个周日凌晨两点和10月份的最后一个星期天的凌晨1点
"US","AU","CA","MX" 夏令时 取3月份的第二个周日凌晨两点和10月份的第一个星期天的凌晨两点
:param dt: utc时间
:return: True:夏令时,Fasle:冬令时
"""
if not isinstance(dt, datetime):
raise ValueError("dt需为dtatime类型")
year = dt.year if region == ["UK", "DE", "FR", "ES", "IT"]:
summer_start_month = 3
summer_start_n = -1
summer_start_w = "sunday"
summer_start_h = 2 summer_end_month = 10
summer_end_n = -1
summer_end_w = "sunday"
summer_end_h = 1 elif region == ["US", "AU", "CA", "MX"]:
summer_start_month = 3
summer_start_n = 2
summer_start_w = "sunday"
summer_start_h = 2 summer_end_month = 10
summer_end_n = 1
summer_end_w = "sunday"
summer_end_h = 2
else:
raise ValueError(f"不支持当前国家{region}")
sum_start = get_month_weekday(year, summer_start_month, n=summer_start_n, w=summer_start_w, h=summer_start_h)
sum_end = get_month_weekday(year, summer_end_month, n=summer_end_n, w=summer_end_w, h=summer_end_h)
print(sum_start, sum_end)
if sum_start <= dt <= sum_end:
return True
return False def conversion_time(dt, region="US"):
""" :param dt: utc时间
:param region: 国家地区
:return: 当地时间
""" if region in ["US", "AU", "CA", "MX"]:
dt = dt + timedelta(hours=-7) if is_dst(dt, region) else dt + timedelta(hours=-8)
elif region == "UK":
dt = dt + timedelta(hours=1) if is_dst(dt, region) else dt
elif region in ["DE", "FR", "ES", "IT"]:
dt = dt + timedelta(hours=2) if is_dst(dt, region) else dt + timedelta(hours=1)
elif region == "JP":
dt = dt + timedelta(hours=9)
elif region == "IN":
dt = dt + timedelta(hours=5)
elif region == "SG":
dt = dt + timedelta(hours=8)
else:
raise ValueError(f"不支持当前国家{region}") return dt if __name__ == '__main__':
# t = datetime(year=2020,month=11,day=19,hour=16)
t = datetime.utcnow()
print(conversion_time(t, region="JP"))

utc时间转换为太平洋时间的更多相关文章

  1. Python中如何把一个UTC时间转换为本地时间

    需求: 将20141126010101格式UTC时间转换为本地时间. 在网上搜了好长时间都没有找到完美的解决方案.有的引用了第三方库,这就需要在现网安装第三方的软件.这个是万万不可的.因为真实环境不一 ...

  2. UTC时间转换为本地时间

    UTC时间转换为本地时间DATEADD(hour, DATEDIFF(hour,GETUTCDATE(),GETDATE()), OrderDate) <'2015-02-02' DECLARE ...

  3. 【測试工具】一个将Unix时间转换为通用时间的工具

    一个将Unix时间转换为通用时间的工具 演示效果: 点击转换之后变为: 源码: function calctime2(){ var time = window.document.getElementB ...

  4. Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?

    存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...

  5. 转自文翼的博客:将本地时间转换为 GMT 时间

    在写 RSS 订阅接口的时候,发现最终输出文章的 RSS 时间(GMT时间),在本地上显示的时间和在服务器上显示的时间不一致. 原因是时区不一致,那么在 JavaScript 中,如何将时间转换为统一 ...

  6. JavaScript把客户端时间转换为北京时间

    写在前面 写了一遍又一遍,网页老卡住,没保存下来,不写了. 时间转换代码 //获得北京时间 Date.prototype.getBJDate = function () { //获得当前运行环境时间 ...

  7. java GMT时间转换为CST时间

    今天在获取windchill的“上次修改时间”的时候发现获取的是GMT时间,但是我们常用的是CST时间 一开始尝试直接设置为CST时区,TimeZone.getTimeZone("CST&q ...

  8. 将UTC日期字符串转为本地时间字符串,如@"yyyy-MM-dd'T'HH:mm:ssZ"转换为本地时间

    由于苹果商店上线应用24小时内会不稳定,更新提醒可能会陷入死循环,更新提醒需要24小时后弹出,需要把苹果返回的上线时间转换为本地时间故写了下边的方法: //将UTC日期字符串转为本地时间字符串//输入 ...

  9. Python时间获取详解,Django获取时间详解,模板中获取时间详解(navie时间和aware时间)

    1.Python获取到的时间 import pytz from datetime import datetime now = datetime.now() # 这个时间为navie时间(自己不知道自己 ...

随机推荐

  1. if __name__ == "__main__"的疑惑

    Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...

  2. JS逆向课程笔记

    扩展知识 Sources-js代码格式化

  3. 「CF645E」 Intellectual Inquiry

    题目链接 CF645E 题意 有一个长为\(n\)的由小写字母组成的字符串,需要用小写字母再填\(m\)位,使最后的字符串中本质不同的子串数量尽量多,答案对\(10^9+7\)取模. 本题数据:\(n ...

  4. 对JVM的一个基础了解

    1.JVM范围 2.JVM和class文件 (1).JVM和Java语言无关,JVM是一种规范,任何语言只要能编译成class文件格式都能在JVM上运行 3.class文件格式 (1).class文件 ...

  5. leetcode152. 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数).示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2:输入: ...

  6. centos8 安装lnmp

    1. 最小化安装 2. 配置基本信息 hostnamectl set-hostname aaa_name 为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/pro ...

  7. 蓝桥杯-RP大冒险-未解决

    RP大冒险 问题描述 请尽情使用各种各样的函数来测试你的RP吧~~~ 输入格式 一个数N表示测点编号. 输出格式 一个0~9的数. 样例输入 0 样例输出 X {当且仅当输出仅有一个数X且X为0~9的 ...

  8. Java基础教程——线程池

    启动新线程,需要和操作系统进行交互,成本比较高. 使用线程池可以提高性能-- 线程池会提前创建大量的空闲线程,随时待命执行线程任务.在执行完了一个任务之后,线程会回到空闲状态,等待执行下一个任务.(这 ...

  9. B 站今日黑白页是怎么实现的?

    今天是2020年4月4日哀悼活动,不少相关站点都将网站全部变为灰色,以表示哀悼.以下为CSS代码.直接在*.css文件最前面加入. <!-- 置为灰色 --> <style type ...

  10. vue微博回调接口

    1.vue微博回调空页面 注:微博回调空页面为: http://127.0.0.1:8888/oauth/callback/ 1.1 页面路径 components\oauth.vue <tem ...