Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python从AT+CCLK结果Telit HE910调制解调器编译的字符串创建闹钟_Python_Date_Alarm - Fatal编程技术网

Python从AT+CCLK结果Telit HE910调制解调器编译的字符串创建闹钟

Python从AT+CCLK结果Telit HE910调制解调器编译的字符串创建闹钟,python,date,alarm,Python,Date,Alarm,我正在尝试从Telit HE910调制解调器返回的字符串创建基于闹钟/日程表的时钟。AT命令是AT+CCLK,字符串结果是:+CCLK:2015/03/26,14:23:22+40。我已将字符串分解为变量的时间戳,其中包含- YYYY-年/MM-月/DD-日/hh-小时/MM-分钟/ss-秒/ampm-上午或下午。所有变量都是字符串,数字类型可以安全地浮动mm等。 我遇到的问题是,如果我的程序停止执行程序的另一部分,并且根据下面的代码,它错过了准确的分钟数,我不确定如何比较分钟数。如果系统在其他

我正在尝试从Telit HE910调制解调器返回的字符串创建基于闹钟/日程表的时钟。AT命令是AT+CCLK,字符串结果是:+CCLK:2015/03/26,14:23:22+40。我已将字符串分解为变量的时间戳,其中包含- YYYY-年/MM-月/DD-日/hh-小时/MM-分钟/ss-秒/ampm-上午或下午。所有变量都是字符串,数字类型可以安全地浮动mm等。 我遇到的问题是,如果我的程序停止执行程序的另一部分,并且根据下面的代码,它错过了准确的分钟数,我不确定如何比较分钟数。如果系统在其他地方,尤其是报警设置时间为XX小时59分钟时,是否有人能提供一种更简单的方法,以便将分钟与5分钟进行比较。系统的另一部分可能会使程序在5分钟左右的时间内看不到这些代码

    def alarm_function(Time, Alarm): # Time Dictionary, Alarm Dictionary
        if Time['ampm'] == Alarm['ampm']:
            if Time['hh'] == Alarm['hh']:
                if float(Time['mm']) == ((float(Alarm['mm']) or (float(Alarm['mm'] + 1) or (float(Alarm['mm'] + 2) or (float(Alarm['mm'] + 3) or (float(Alarm['mm'] + 4) or (float(Alarm['mm'] + 5)):
                    return True
        return False

仅用于视觉表达的分钟比较…

以下是如何解析AT+CCLK?对表示UTC时间的datetime对象的响应:

from datetime import datetime, timedelta

cclk_answer = "+CCLK: 15/03/26,14:23:22+40"
local_time = datetime.strptime(cclk_answer[:-3], "+CCLK: %y/%m/%d,%H:%M:%S")
utc_offset = timedelta(minutes=15*int(cclk_answer[-3:]))
utc_time = local_time - utc_offset
# -> datetime.datetime(2015, 3, 26, 4, 23, 22)
注意:如果年份为4位数字,则使用%Y,但表示年份使用2位数字%Y表示

获得utc时间后,可以直接将其与utc中的其他datetime对象进行比较:

if abs(utc_time - alarm_time) < timedelta(minutes=5):
    print("the modem time is within 5 minutes from the alarm time")

顺便说一句,要获得UTC的当前时间,当前时间=datetime.utcnow。

问题不清楚,因为有三个部分:1。您应该使用对象来表示时间,例如datetime对象,而不是比较字符串的第2部分。您可以在程序中同时执行多项操作,例如,使用或。3.感谢J.F塞巴斯蒂安,不幸的是调制解调器无法访问日期时间。感谢您的帮助,因为我不知道如何使用datetime删除日期和时间,这将在其他支持它的项目中派上用场。@ToddRobards:您的问题被标记为python。datetime是标准Python库的一部分。不幸的是,Telit决定在python安装包中不包含datetime以节省空间。对此不高兴。。。为了证明我自己是错的,我甚至把你的代码放进了我的设备,但它并不是一看到就运行的:从datetime导入datetime,TimeDeltai如果你使用一种自定义语言,使用类似Python的语法,那么你应该在问题中提到它。能否在调制解调器外使用普通Python与调制解调器通信?