由于某种原因(BIOS电池没电),电脑的系统时间会与我们的北京时间不同步,将会导致如下问题:

1. 抢火车票的时候已经过时间了

2.别的同事都走了,你还以为没下班

……

规避问题的方法:同步系统时间

一. 获取时间

在这里,我们有两种方法

1.  通过系统请求网站服务器头部返回Respones Headers

获取Date 参数值,修改系统时间

    def getTime(self,url):
conn = http.client.HTTPConnection(url)
conn.request("GET", "/")
r = conn.getresponse()
# r.getheaders() #获取所有的http头
ts = r.getheader('date') # 获取http头date部分
# 将GMT时间转换成北京时间
ltime = time.strptime(ts[5:25], "%d %b %Y %H:%M:%S") # 格式ts
ttime = time.localtime(time.mktime(ltime) + 8 * 60 * 60) # +东八区
dat = "date %u-%02u-%02u" % (ttime.tm_year, ttime.tm_mon, ttime.tm_mday)
tm = "time %02u:%02u:%02u" % (ttime.tm_hour, ttime.tm_min, ttime.tm_sec)
return [dat, tm]

在这里解释下strptime函数中,时间字符串的格式化说明

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)

%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身n

代码中的%参数解析

%[flags][width][.precision][size]type

%02u :
“0”是flags,表示补“0”;
“2”是width,表示输出的长度;
“u”是type, 表示数据的类型为无符号数;
整个意思是:打印一个无符号数的两位(十进制),若不满两位则在前面补0.

2. 通过获取授时中心的标准时间修改系统时间

授时中心的网址:

http://www.pool.ntp.org/
ntplib 下载地址:
https://pypi.python.org/pypi/ntplib/

    def getTime(self):
c = ntplib.NTPClient()
response = c.request('pool.ntp.org') # 授时中心的网址
ts_stamp = response.tx_time
ts = time.localtime(ts_stamp)
ttime = time.localtime(time.mktime(ts) + 8 * 60 * 60) # +东八区
return ts

二. 同步时间

获取时间后,我们要同步时间,同步时间也有两种方法

1.通过os.system 同步

    def setTime(self,time):
os.system(time[0])
os.system(time[1])

2.通过win32api.SetSystimeTime 同步

    def setTime(self,time_cls):
ttime = time.localtime(time.mktime(time_cls) - 8 * 60 * 60) # 本为东八区,却set后多出8小时 UTC多了8个小时 , 所以……
time_cls = ttime
win32api.SetSystemTime(time_cls.tm_year, time_cls.tm_mon, time_cls.tm_wday, time_cls.tm_mday, time_cls.tm_hour, time_cls.tm_min, time_cls.tm_sec, 0)

完整代码如下:

# -*- coding:utf-8 -*-
# 1.获取网络时间
# 2.修改系统时间
import http.client
import time
import os,sys
import ntplib
import win32api '''
'同步时间类
'''
class syctimes():
def __init__(self):
if sys.argv.__len__() == 1:
try:
time_list = self.getTime1()
self.setTime1(time_list)
except:
time_list = self.getTime2('www.baidu.com')
self.setTime2(time_list)
for arg in sys.argv:
if arg == '-1':
time_list = self.getTime1()
self.setTime1(time_list)
if arg == '-2':
time_list = self.getTime2('www.baidu.com')
self.setTime2(time_list) sys.exit() def getTime1(self):
c = ntplib.NTPClient()
response = c.request('pool.ntp.org') # 授时中心的网址
ts_stamp = response.tx_time
ts = time.localtime(ts_stamp)
ttime = time.localtime(time.mktime(ts) + 8 * 60 * 60) # +东八区
return ts def getTime2(self,url):
conn = http.client.HTTPConnection(url)
conn.request("GET", "/")
r = conn.getresponse()
# r.getheaders() #获取所有的http头
ts = r.getheader('date') # 获取http头date部分
# 将GMT时间转换成北京时间
ltime = time.strptime(ts[5:25], "%d %b %Y %H:%M:%S") # 格式ts
ttime = time.localtime(time.mktime(ltime) + 8 * 60 * 60) # +东八区
dat = "date %u-%02u-%02u" % (ttime.tm_year, ttime.tm_mon, ttime.tm_mday)
tm = "time %02u:%02u:%02u" % (ttime.tm_hour, ttime.tm_min, ttime.tm_sec)
return [dat, tm] '''
修改时间1
'''
def setTime1(self,time_cls):
ttime = time.localtime(time.mktime(time_cls) - 8 * 60 * 60) # 本为东八区,却set后多出8小时 UTC多了8个小时 , 所以……
time_cls = ttime
win32api.SetSystemTime(time_cls.tm_year, time_cls.tm_mon, time_cls.tm_wday, time_cls.tm_mday, time_cls.tm_hour, time_cls.tm_min, time_cls.tm_sec, 0) '''
修改时间2
'''
def setTime2(self,time):
os.system(time[0])
os.system(time[1]) if __name__ == "__main__":
classSyc = syctimes()
# 方法1:
#time_list = classSyc.getTime1()
#classSyc.setTime1(time_list) # 方法2:
# time_list = classSyc.getTime2('www.baidu.com')
# classSyc.setTime2(time_list)

打包代码为exe 添加随系统启动执行

import sys

if __name__ == '__main__':
from PyInstaller import __main__
params = ['-F', '-w', '--icon=favicon.ico', 'times.py']
__main__.run(params)
# -*- coding:utf-8 -*-
import win32api
import win32con name = 'SycTimeTool' # 要添加的项值名称
path = 'E:\dcb3688\时间同步工具.exe -1' # 要添加的exe路径
# 注册表项名
KeyName = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
# 异常处理
try:
key = win32api.RegOpenKey(win32con.HKEY_CURRENT_USER, KeyName, 0, win32con.KEY_ALL_ACCESS)
win32api.RegSetValueEx(key, name, 0, win32con.REG_SZ, path)
win32api.RegCloseKey(key)
except:
print('error')
print('添加成功!')

python windows时间同步工具的更多相关文章

  1. Python学习笔记 (1) :python简介、工具、编码及基础运算

    学习背景: 精通一门编程语言并编写出自己喜欢的程序是我多年的梦想,一定要找时间实现.此时想起了高中时的我对编程的兴趣十分浓厚,父母给自己购买了学习机插卡式的,只能敲basic代码,同时学校有386计算 ...

  2. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  3. python入门:python包管理工具pip的安装

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. distribute是setuptools的取代(Setuptools包后期不再维护了),pip是e ...

  4. python反编译工具

    开发类在线工具:https://tool.lu/一个反编译网站:https://tool.lu/pyc/ 一看这个标题,就是搞坏事用的, 用 java 写程序多了,很习惯用反编译工具了,而且玩java ...

  5. 火眼发布Windows攻击工具集

    导读 渗透测试员的喜讯:安全公司火眼发布Windows攻击工具集--足足包含140个程序. Kali Linux 已成为攻击型安全专家的标配工具,但对需要原生Windows功能的渗透测试员来说,维护良 ...

  6. Python代码统计工具

    目录 Python代码统计工具 声明 一. 问题提出 二. 代码实现 三. 效果验证 Python代码统计工具 标签: Python 代码统计 声明 本文将对<Python实现C代码统计工具(一 ...

  7. Python测试 ——开发工具库

    Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ...

  8. Python消息队列工具 Python-rq 中文教程

    原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...

  9. python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda

    ---恢复内容开始--- python基础系列教程——Python的安装与测试:python的IDE工具PyDev和pycharm,anaconda 从头开启python的开发环境搭建.安装比较简单, ...

随机推荐

  1. python笔记1-转义字符

    print(r'dd"e"f')print(r'dd'e'f')print(r"dd"e"f")print(r"dd'e'f&qu ...

  2. web前端基础知识-(八)Ajax

    Ajax即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,AJAX = 异步 Ja ...

  3. SQL中distinct的用法

    SQL中distinct的用法   1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...

  4. React项目(二):生命游戏

    引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...

  5. window 使用vagrant搭建开发开发环境

    # -*- mode: ruby -*-# vi: set ft=ruby : # All Vagrant configuration is done below. The "2" ...

  6. RabbitMQ之window安装步骤

    安装Rabbit MQ Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 Era ...

  7. 11i和R12配置JAR包

    R11:$IAS_ORACLE_HOME/Apache/Jserv/etc/jserv.properties R12: 方法1:直接解压JAR包放到$JAVA_TOP下: 方法2:编辑:$ORA_CO ...

  8. 利用xhsell登录到远程腾讯云服务器

    xshell连接管理腾讯云服务器图文教程 打开xshell点击文件新建会话框 linux服务器ssh管理软件XSHELL下载及安装图文教程 输入公网IP地址确认下一步 选中服务器连接 一次性接受,不储 ...

  9. Redis-3.2.6 配置文件中文翻译

    ############## # 指定配置文件: ################################## INCLUDES ############################### ...

  10. 查找Linux中内存和CPU使用率最高的进程

    下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [root@iZ25pvjcsyhZ ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem ...