utc时间转换为太平洋时间
方法一
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时间转换为太平洋时间的更多相关文章
- Python中如何把一个UTC时间转换为本地时间
需求: 将20141126010101格式UTC时间转换为本地时间. 在网上搜了好长时间都没有找到完美的解决方案.有的引用了第三方库,这就需要在现网安装第三方的软件.这个是万万不可的.因为真实环境不一 ...
- UTC时间转换为本地时间
UTC时间转换为本地时间DATEADD(hour, DATEDIFF(hour,GETUTCDATE(),GETDATE()), OrderDate) <'2015-02-02' DECLARE ...
- 【測试工具】一个将Unix时间转换为通用时间的工具
一个将Unix时间转换为通用时间的工具 演示效果: 点击转换之后变为: 源码: function calctime2(){ var time = window.document.getElementB ...
- Python: 处理mongodb文档,怎么让UTC时间转换为本地时间?
存储数据到MongoDB数据库时,一般我们会加一个更新数据的时间update_time.这时在python代码中 会用到datetime模块以便获取当前系统时间,但是存入到MongoDB数据库时,存储 ...
- 转自文翼的博客:将本地时间转换为 GMT 时间
在写 RSS 订阅接口的时候,发现最终输出文章的 RSS 时间(GMT时间),在本地上显示的时间和在服务器上显示的时间不一致. 原因是时区不一致,那么在 JavaScript 中,如何将时间转换为统一 ...
- JavaScript把客户端时间转换为北京时间
写在前面 写了一遍又一遍,网页老卡住,没保存下来,不写了. 时间转换代码 //获得北京时间 Date.prototype.getBJDate = function () { //获得当前运行环境时间 ...
- java GMT时间转换为CST时间
今天在获取windchill的“上次修改时间”的时候发现获取的是GMT时间,但是我们常用的是CST时间 一开始尝试直接设置为CST时区,TimeZone.getTimeZone("CST&q ...
- 将UTC日期字符串转为本地时间字符串,如@"yyyy-MM-dd'T'HH:mm:ssZ"转换为本地时间
由于苹果商店上线应用24小时内会不稳定,更新提醒可能会陷入死循环,更新提醒需要24小时后弹出,需要把苹果返回的上线时间转换为本地时间故写了下边的方法: //将UTC日期字符串转为本地时间字符串//输入 ...
- Python时间获取详解,Django获取时间详解,模板中获取时间详解(navie时间和aware时间)
1.Python获取到的时间 import pytz from datetime import datetime now = datetime.now() # 这个时间为navie时间(自己不知道自己 ...
随机推荐
- 编译的Ceph二进制文件过大问题
前言 在ceph的研发群里看到一个cepher提出一个问题,编译的ceph的二进制文件过大,因为我一直用的打包好的rpm包,没有关注这个问题,重新编译了一遍发现确实有这个问题 本篇就是记录如何解决这个 ...
- @Autowired自动装配原理
在类中为类名添加 @Auwowired注解,为该类在spring中注册成组件 1,先按照类型在容器中找对应的组件:找到一个, 直接赋值,一个都没找到, 抛异常 2,找到了多个:按变量名作为ID继续匹配 ...
- Java中List,Set,Map区别
在Java开发面试中,面试官最常问到的就是Java集合,免不了要让面试者说出之间的区别,下面博主就对其做了总结. 1.集合与数组的区别 长度区别:数组是固定长度,集合长度可变: 内容区别:数组可以是基 ...
- shell脚本快速入门----shell基本语法总结
1.#!脚本的开头 #!/bin/bash 2.脚本属性 添加可执行属性,chmod +x 或使用"."运行,例如运行当前目录下的a.sh 可执行命令 ". ./a.sh ...
- spring boot和spring cloud的区别
Java中说到微服务肯定离不开Spring Boot和Spring Cloud,这两者到底有什么关系,什么是微服务,如果单纯的说SpringBoot,SpringCloud,都是不准确的,那应该怎么回 ...
- bWAPP----HTML Injection - Reflected (GET)
HTML Injection - Reflected (GET) 进入界面, html标签注入 这是核心代码 1 <div id="main"> 2 3 <h1& ...
- linux 用户组操作
1. 添加用户到...目录中useradd -M -s /目录 username 2. 添加用户属于多个组 usermod -G 本组(用户名),组1,组2... 用户名 3. mysql添加禁止登录 ...
- Mac电脑数据被误删了怎么办,还能恢复吗
随着苹果产品的使用率越来越高,苹果电脑视频丢失的风险也是居高不下,大部分情况下都是由于误操作或者是中病毒导致视频丢失,苹果电脑视频恢复可以实现吗?涉及到文件恢复的问题,找EasyRecovery文件恢 ...
- JS你所不知的小数取整方法
先介绍几种基本方法. 1.toFixed()方法 toFixed() 方法是属于 Number 对象的方法,可以把 Number 四舍五入到指定的小数位数,括号内为小数位数,范围为0~20,为0时即取 ...
- LeetCode周赛#212
1631. 最小体力消耗路径 #并查集 #最短路径 题目链接 题意 给定一二维 rows x columns 的地图 heights ,其中 heights[row][col] 表示格子 \((row ...