计算机联网时间管理

对电脑当日联接外网时间进行管理,超过设定时间进行关机

思路

“”"
引言:怎么防止系统时间被修改后依然能正确计算联网时间

怎么读取电脑关机时间?
如何判断超时上网,并进行超时关机
怎么区分"当日"上网时间?

需求升级: 网络不稳、中途断网怎么办?
“”"
时间戳获取: http://www.beijing-time.org/shijianchuo/
执行效果

以下为主程序(文件名: OOC.py)

#  *_* coding:utf8 *_*

from write_json_data import read_json_data, update_json_data
from datetime import datetime
import ctypes
import time
import os
import json
import requests

# 刷新频率(单位s)
REFRESH_RATE = 10
# 网络异常时间阈值(单位s),用于判断异常断网检测
MAX_NETWORK_EXCEPT_TIME = 3
# 最大允许每日联网时长(单位s)
MAX_NETWORKING_TIME = 2 * 60 * 60

url = "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp"

while True:
    # 开始联网
    # 这里也可以使用函数递归调用的方式处理网络不稳或等待联网
    while True:
        # noinspection PyBroadException
        try:
            startup_dt = json.loads(requests.get(url, timeout=1).text)["data"]
            current_date = datetime.fromtimestamp(int(startup_dt["t"])//1000).date()
        except:
            time.sleep(30)
            continue
        else:
            break

    # 写入联网开始时间
    update_json_data("startup", startup_dt)

    while True:
        # 更新联网结束时间,超过最大联网次数退出本次联网时间计时,重新开始新的联网计时
        # noinspection PyBroadException
        try:
            shutdown_dt = json.loads(requests.get(url, timeout=MAX_NETWORK_EXCEPT_TIME).text)["data"]
        except:
            break

        update_json_data("shutdown", shutdown_dt)
        ooc_data = read_json_data()
        ooc_list = ooc_data["ooc"]
        interval_seconds = 0
        for ooc in ooc_list:
            # 转换为UTC标准时间戳
            start_stamp = int(ooc["startup_dt_str"]["t"])//1000
            end_stamp = int(ooc["shutdown_dt_str"]["t"])//1000
            network_start = datetime.fromtimestamp(start_stamp)
            network_end = datetime.fromtimestamp(end_stamp)
            if ooc == ooc_list[0]:
                print("最后联网起始时间: {}\n最后联网终止时间: {}".format(network_start, network_end))
            if network_start.date() == current_date and network_end.date() == current_date:
                interval_seconds += (end_stamp - start_stamp)
            elif network_end.date() == current_date:
                # 东八区天数start_stamp// 86400 * 86400
                interval_seconds += (end_stamp + 8*3600 - (end_stamp + 8*3600) // 86400 * 86400)
                break
            else:
                break
        print("当日联网时长: {}s \n".format(interval_seconds))
        if interval_seconds > MAX_NETWORKING_TIME:
            os.system("shutdown -s -t 120")
            ctypes.windll.user32.MessageBoxW(0, '当日连续上网{}min,已超过限制的上网时长[{}min]\n你的电脑将于2min后关机'
                                             .format(interval_seconds//60, MAX_NETWORKING_TIME//60), '关机', 0)
        time.sleep(REFRESH_RATE)


以下为数据写入包(文件名名: write_json_data)

#  *_* coding:utf8 *_*
# json读
import json
import os

json_path = os.path.join(os.path.dirname(__file__), "ooc.json")

def read_json_data():
    with open(json_path, "r", encoding="utf8") as f:
        return json.load(f)

# json写
def update_json_data(status, dt_str):
    if status == "startup":
        ooc_data = read_json_data()
        ooc_data["ooc"].insert(0, {
            "startup_dt_str": dt_str,
            "shutdown_dt_str": dt_str
        })
    elif status == "shutdown":
        ooc_data = read_json_data()
        ooc_data["ooc"][0]["shutdown_dt_str"] = dt_str
    else:
        return

    with open(json_path, "w", encoding="utf8") as f:
        json.dump(ooc_data, f, ensure_ascii=False)

以下为程序运行的数据(文件名: ooc.json)

{“ooc”: [{“startup_dt_str”: {“t”: “1557208691196”}, “shutdown_dt_str”: {“t”: “1557209284186”}},]}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值