#!/usr/bin/python
# -*- coding: UTF-8 -*-

import time
import re
from datetime import datetime, timezone, timedelta
import pytz

date_time = r'([0-9]{4})[/-]*([0-9]{2})[/-]*([0-9]{2}) ([0-9]{2}):*([0-9]{2}):*([0-9]{2})'
str_time = r'([0-9]{2}):*([0-9]{2}):*([0-9]{2})'

local_timezone = datetime.now(timezone.utc).astimezone().tzinfo
hour_offset = time.timezone /60 /60 *(-1)

timezone_mapping = {}
timezone_mapping['beijing'] = pytz.timezone('Asia/ShangHai')
timezone_mapping['dalian'] = pytz.timezone('Asia/ShangHai')
timezone_mapping['usa'] = pytz.timezone('America/New_York')
timezone_mapping['newyork'] = pytz.timezone('America/New_York')

def _get_timezone(input_name):
if input_name in timezone_mapping:
return timezone_mapping[input_name]
for item in pytz.common_timezones:
if item.lower().find( input_name ) >= 0:
return pytz.timezone(item)
return None

def _main_func_():
while True:
print("welcome, please input your time")
ipt = input()
if ipt == 'exit' or ipt == 'no' or ipt == 'n':
break
if not ipt:
continue

dt_time = ''

if re.match( date_time, ipt ):
m = re.match( date_time, ipt )
dt_time = datetime( int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4)), int(m.group(5)), int(m.group(6)),0)

elif re.match( r'.* '+ date_time, ipt ):
city = str.lower(ipt[:ipt.find(' ')])
tz = _get_timezone(city)
if not tz:
print('no such city in dictionary')
continue

m = re.match( r'.* '+ date_time, ipt )
dt_time = datetime(int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4)), int(m.group(5)), int(m.group(6)),0)
dt_time = tz.localize(dt_time)

elif re.match( str_time, ipt):
m = re.match( str_time, ipt)
tt = datetime.now()
dt_time = datetime(tt.year, tt.month, tt.day, int(m.group(1)), int(m.group(2)), int(m.group(3)),0)

elif re.match( r'.* '+ str_time, ipt ):
city = str.lower(ipt[:ipt.find(' ')])
tz = _get_timezone(city)
if not tz:
print('no such city in dictionary')
continue

m = re.match(r'.* '+ str_time, ipt)
tt = datetime.now()
dt_time = datetime( tt.year, tt.month, tt.day, int(m.group(1)), int(m.group(2)), int(m.group(3)),0)
dt_time = tz.localize(dt_time)

else:
print('you have input a wrong format')

dt_ShangHai = dt_time.astimezone(pytz.timezone('Asia/ShangHai'))
dt_Tokyo = dt_time.astimezone(pytz.timezone('Asia/Tokyo'))
dt_NewYork = dt_time.astimezone(pytz.timezone('America/New_York'))

print_result('ShangHai', dt_ShangHai)
print_result('Tokyo', dt_Tokyo)
print_result('New_York', dt_NewYork)

while True:
print('want to change to other timezone')
ipt = input()
if ipt == 'exit' or ipt == 'no' or ipt == 'n':
break

print('input a city')
ipt = input()
tz = _get_timezone(str.lower(ipt))
if not tz:
print('no such city')
continue

dt_new = dt_time.astimezone(tz)
print_result( ipt, dt_new )

def print_result( city, dt_in ):
fmt = "%Y-%m-%d %H:%M:%S %Z"
output = dt_in.strftime(fmt)
output = output + ' <- ' + city + " Time"
print(output)

def _test():
tz = pytz.timezone('Asia/ShangHai')
dt_time = datetime(2022,10,28,11,11,11,0)
print(dt_time.isoformat())
print(dt_time)

dt_time = tz.localize(dt_time)
print(dt_time.isoformat())
print(dt_time)

if __name__ == '__main__':
_main_func_()
# _test()

最新文章

  1. C# 正则表达式大全
  2. Angularjs学习笔记(四)----与后端服务器通信
  3. file文件的操作
  4. nodejs将PDF文件转换成txt文本,并利用python处理转换后的文本文件
  5. 找不到 -lz解决方法
  6. uml的关联多重度
  7. AJAX项目中的一些总结
  8. C#错误与异常处理
  9. Android测试框架1(非原创)
  10. easyUI datagrid 动态绑定列名称
  11. arcpy.mapping常用四大件-StyleItem
  12. mongo+mongoose+express
  13. 在jQuery中使用canvas时遇到的问题
  14. java中的mvc和三层结构究竟是什么关系
  15. Solr04 - 在Jetty和Tomcat上部署Solr单机服务
  16. 软件安装配置笔记(三)——ArcGIS系列产品安装与配置(补档)(附数据库连接及数据导入)
  17. M2 终审
  18. 基于Spring3 MVC实现基于form表单文件上传
  19. 【转】fscanf 跳过空格,读取一行
  20. python接口自动化测试三:代码发送HTTP请求

热门文章

  1. 随机森林RF模型超参数的优化:Python实现
  2. BSPline
  3. cv::Mat::step详解
  4. IOS12.0 + Xcode 12.0 错误:Building for iOS Simulator, but the linked and embedded framework &#39;XXX.framework&#39; was built for iOS + iOS Simulator
  5. Cesium entity画各种图(十六)
  6. python下载图片实现方法
  7. Moonraker
  8. PostGIS之空间索引
  9. 【译】.NET 7 中的性能改进(十)
  10. JavaScript验证API