一种基于单时钟系统的夏令时实现方法与流程

文档序号:11728934阅读:209来源:国知局
一种基于单时钟系统的夏令时实现方法与流程

本发明涉及夏令时功能的实现方法,具体涉及一种基于单时钟系统的夏令时实现方法。



背景技术:

通常,装置的夏令时时间是由基于utc时间的时钟系统实现,或者基于本地时间及utc时间两套时钟源共同实现,但是,对于一些已经完成并仅采用了本地时钟作为时间源且不便于更改该时间源为utc时间的装置而言,修改它们自身的时钟系统往往意味着巨大的风险与人力投入。鉴于大量针对国内市场的装置在初始设计时并未考虑到夏令时功能的实现,且其采用了基于本地时间的计时系统,当面向海外市场时,必需在此类装置上加入夏令时功能,但是会出现由于有限的系统资源或其他原因无法扩充出第二套时钟计时系统或原计时系统全面修改为以utc时间为基准的即使系统风险及成本过大的问题。因此,需要一种可以在已有的基于本地时间运行的时间系统的基础上实现夏令时功能,且能够让该夏令时功能具有同基于utc时间的夏令时系统相同的故障恢复能力,可降低维护装置程序所带来的成本投入与全面修改时间系统的风险,具有极大的现实意义。



技术实现要素:

为了实现上述技术目的,本发明提出一种基于单时钟系统的夏令时实现方法,能够可降低维护装置程序所带来的成本投入与全面修改时间系统的风险。

实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:

一种基于单时钟系统的夏令时实现方法,包括以下步骤:

步骤一、启动夏令时处理模块的初始化流程;

步骤二、启动夏令时处理模块的主循环流程,获取装置本身的当前系统时间,并判断其与当前年份夏令时起止时刻的关系;

步骤三、结合步骤二中的判断结果来控制装置本身系统时间与夏令时时间的切变,从而完成基于单时钟系统的夏令时功能的实现。

进一步地,所述步骤一具体包括以下步骤:

(1a)生成稳定数组a,稳定数组a中存储n年的夏令时起止时刻;

(1b)将稳定数组a复制到临时数组b;

(1c)装置从失电状态恢复时,根据保存的真实夏令时使能标志值,置主循环流程的初始真实夏令时使能标志和前次失电时的夏令时状态标志有效或者无效。

进一步地,所述步骤一还包括:(1d)若装置从未启动夏令时功能,当切换进入夏令时功能启动状态时,则令启动夏令时功能前的最后时刻为不包含夏令时时间调整的utc加时区偏移时间。

进一步地,所述步骤(1c)中的真实夏令时使能标志用于代表装置是否进入夏令时时间状态。

进一步地,所述步骤二中,当判断出当前时刻处于夏令时时间内,置1夏令时状态标志;当判断出当前时刻不处于夏令时时间内,置0夏令时状态标志。

进一步地,所述步骤1(c)具体为:读取装置内存储的装置前次失电前的真实夏令时使能标志,若前次失电前的真实夏令时使能标志为1,则将真实夏令时使能标志和前次失电时的夏令时状态标志均置为有效;反之将真实夏令时使能标志和前次失电时的夏令时状态标志均设置为无效。

进一步地,所述步骤二具体包括:获取装置的当前运行时刻,并与当前年份所对应的夏令时起止时间进行比较,判断当前时刻是否处于夏令时时间内,置数夏令时状态标志。

进一步地,所述步骤三具体包括以下步骤:

(3a)判断本次所得到的夏令时状态标志相比前一次的夏令时状态标志是否发生改变;

(3b)当本次所得到的夏令时状态标志相比前一次的夏令时状态标志由0变1时,则将真实夏令时使能标志置1,并向外提供该标志,同时将装置的系统时间自加一小时,向文件输出一次切变后的真实夏令时使能标志并保存,装置进入夏令时时间状态;

(3c)当本次所得到的夏令时状态标志相比前一次的夏令时状态标志由1变0时,则将真实夏令时使能标志置0,并向外提供该标志,将保存有夏令时起止时间的临时数组b中当前年份的退出夏令时时刻自减一小时,向文件输出一次切变后的真实夏令时使能标志并保存,装置退出夏令时时间状态;当装置的系统时间走出设定的夏令时退出时刻与该时刻减一小时的时间段后使用保存有夏令时起止时间的稳定数组a覆盖临时数组b。

进一步地,当装置采用sntp类时钟源对时时,则夏令时处理模块的主循环流程采用通过对时收到的时间信息作为装置的系统时间,处理后并根据该时间修改装置的系统时间,进而完成外部时钟同步,同时当处于两次外部对时中间的间隔时,夏令时处理模块的主循环流程根据装置本身的系统时间进行循环判断。

进一步地,当装置采用irig-b类时钟源对时时,则不对装置的系统时间进行修改,夏令时功能不会修改由对时所获取的本地时间,但依然计算真实夏令时使能标志,从而为计算utc时间提供辅助标志。

本发明的有益效果:

在原始设计只拥有一套时钟系统的软件/设备下,为适应国际化的夏令时需求,重构同时具有本地时间和utc计时的系统代价过大,本发明提供了一种极低代价的在单时钟系统装置上实现稳定可靠夏令时功能的方式,并可通过软件在单时钟系统下模拟出双时间系统供外部使用。

附图说明

图1为本发明一种实施例的总体流程示意图;

图2为本发明一种实施例的夏令时处理模块的初始化流程示意图;

图3为本发明一种实施例的夏令时处理模块的主循环流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图对本发明的应用原理作详细的描述。

本发明在具体实施的过程中会使用到临时数组,临时数组是在夏令时模块的主循环流程判别中直接使用到的数组,并且临时数组的取值在程序执行过程中可能被修改(例如:当夏令时退出进入时间重复的一小时内时,该退出时刻会以原值减一小时的状态存在,而当装置的本地系统时间走出时刻重复的一小时后,该临时数组通过被稳定数组a覆盖而恢复),且夏令时模块初始化时,直接复制稳定数组a给临时数组b。在实施例的具体实现过程中,稳定数组a中的数据(即夏令时进入、退出时刻数据)只在系统初始化进程中被设定一次,之后便维持恒定。

如图1所示,一种基于单时钟系统的夏令时实现方法,包括以下步骤:

步骤一、启动夏令时处理模块的初始化流程;

步骤二、启动夏令时处理模块的主循环流程,获取装置本身的当前系统时间,并判断其与当前年份夏令时起止时刻的关系(即判断其是否超出夏令时起止边界);

步骤三、结合步骤二中的判断结果来控制装置本身系统时间与夏令时时间的切变,从而完成基于单时钟系统的夏令时功能实现。

如图2所示,在本发明的一种实施例中,所述步骤一具体包括以下步骤:

(1a)生成稳定数组a,稳定数组a中存储n年的夏令时起止时刻;

具体实施时:向装置中输入夏令时起止时间,或者在装置启动过程中由设置文件中读

取当前起止月份/周/星期/起止小时等信息),并由装置自动推算出n年的夏令时起止时

刻,然后存入稳定数组a中;当夏令时功能启动,且手动设置装置时间时,如果输入

的本地时间位于夏令时所导致的重复小时的时间段之内时,装置将询问所输入的时刻

属于第几个由于夏令时所导致重复的时间段内。

(1b)将稳定数组a复制到临时数组b;

(1c)装置从失电状态恢复时,根据保存的真实夏令时使能标志值,置主循环流程的初始真实夏令时使能标志和前次失电时的夏令时状态标志有效或者无效。

优选地,所述步骤(1a)和(1b)之间还包括根据起止月份判断装置所处的半球。

优选地,所述步骤(1c)中的真实夏令时使能标志置用于代表装置是否进入夏令时时间状态。

优选地,所述步骤1(c)具体为:读取装置内存储的装置前次关闭前的真实夏令时使能标志;根据装置前次失电前所存储的真实夏令时使能标志的状态,为夏令时处理模块的主循环流程写入初值,具体为:当该标志表示设备失电前,设备软时钟时间处于夏令时时间段内,则将夏令时处理模块的主循环流程中的当前真实夏令时标使能志置为有效(1),同时将前次失电时的夏令时状态标志置为有效(1),装置当前时间设定为守时芯片给出的本地时间,后启动夏令时主循环;反之,当该标志表示关闭设备前,设备软时钟时间并非处于夏令时时间段内,则将夏令时处理主循环中的当前真实夏令时使能标志置为无效(0),同时将前次失电时的夏令时状态标志置为无效(0),装置当前时间设定为守时芯片给出的本地时间,后启动夏令时主循环。

优选地,所述步骤二具体为:获取装置的当前运行时刻(即装置的系统时间),并与当前年份所对应的夏令时起止时间进行比较,判断当前时刻是否处于夏令时时间内,置数夏令时状态标志;当判断出当前时刻处于夏令时时间内,置1夏令时状态标志;当判断出当前时刻不处于夏令时时间内,置0夏令时状态标志。

如图3所示,在本发明的一种实施例中,所述步骤三中的具体包括以下步骤

(3a)判断本次所得到的夏令时状态标志相比前一次的夏令时状态标志是否发生改变;

(3b)当本次所得到的夏令时状态标志相比前一次的夏令时状态标志由0变1时,则将真实夏令时使能标志置1,且将该标识状态写入文件保留,并向外提供该标志,同时将装置的系统时间自加一小时,装置进入夏令时时间状态;

其中,夏令时处理模块的主循环流程的初次循环时,是将本次所得到的夏令时状态标志与初始化过程中得到的夏令时状态标志进行比较的。

(3c)当本次所得到的夏令时状态标志相比前一次的夏令时状态标志由1变0时,则将真实夏令时使能标志置0,且将该标识状态写入文件保留,并向外提供该标志,将保存有夏令时起止时间的稳定数组b中退出夏令时时刻自减一小时形成临时数组,装置退出夏令时时间状态,同时将令夏令时退出时间自动减去一小时的标志置1,当装置的系统时间走出设定的夏令时退出时刻与该时刻减一小时的时间段后使用保存有夏令时起止时间的稳定数组b覆盖临时数组,恢复全部夏令时标志至原始状态;

如图3中所示,在使用程序来实现的时候,包括以下过程:

(1)判断出本次所得到的夏令时状态标志相比前一次的夏令时状态标志由1变0,将真实夏令时使能标志置0,并向外提供该标志;

(2)将保存有夏令时起止时间的临时数组b中退出夏令时时刻自减一小时,装置退出夏令时时间状态;

(3)将令夏令时退出时间自动减去一小时的标志置1;

(4)判断当前系统时间是否在临时数组的夏令时退出时刻(即原始夏令时退出时刻减一小时的时刻)与原始设置的夏令时退出时刻之间,若不在,则强制使用保存有夏令时起止时间的稳定数组a覆盖临时数组b。(在真实夏令时标志置0的同时,夏令时退出时刻数组中该年度的退出时刻标记将直接被减计一小时);

(3d)当本次所得到的夏令时状态标志相比前一次的夏令时状态标志没发发生改变时,顺次判断当前系统时间是否位于在临时数组b中夏令时退出时刻与设置的夏令时退出时刻之间、当前真实夏令时状态是否为有效,只有当前述二项条件都不满足时,使用保存有夏令时起止时间的稳定数组b覆盖临时数组;只要有其中一项条件满足,都直接进入下一个循环流程。

由于装置只采用本地时间作为唯一的系统时钟,因此夏令时退出时间段(假设夏令时会在n日2时退出)会存在两个n日1时到n日2时的时间段(分别为夏令时退出前的1时到2时的时间段和夏令时退出后的1时到2时的时间段);当在夏令时状态下,系统时钟运行到第一个n日2时后,将会由于夏令时状态的退出,装置系统时间回到n日1时,此时,则将当前年份夏令时退出时刻自减3600秒的时刻作为夏令时退出时刻(通过将临时数组中设定的夏令时退出时刻自减3600秒的时刻作为新的夏令时退出时刻),以此避免出现无限循环的现象。同时,当系统时钟走出或由于外部设定离开此一小时长度的冲突时间段(1时到2时)后,使用稳定数组a覆盖临时数组b,恢复全部夏令时标志至原始状态。

前述的夏令时实时处理过程中的系统时间均未涉及外部对时信号,当涉及到外部对时信号时,采用如下两种方法来实现:

(1)在本发明的一种实施例中,当装置采用sntp类时钟源对时时,则夏令时处理模块的主循环流程采用通过对时收到的时间信息作为装置的“基础系统时间”(此时夏令时主循环逻辑将不读取装置本地时钟时间而直接采用sntp对时得到的时间作为判断逻辑中的“本地时间”使用),处理后并根据该时间修改装置的系统时间,进而完成外部时钟同步,同时当处于两次外部对时中间的间隔时,夏令时处理模块的主循环流程根据装置本身的系统时间进行循环判断。

(2)在本发明的一种实施例中,当装置采用irig-b类时钟源对时时,则不对装置的系统时间进行修改(即直接屏蔽夏令时模块主循环中的时间修改部分),夏令时为计算utc时间提供辅助标志。具体为:当使用irig-b对时时,装置会直接获取到包含夏令时信息的本地时间,所以装置只需要将时间与irig-b类对时保持一致(不需要自身对本机时间加减一小时操作),但此时,装置同外界的部分通讯功能仍然是基于utc时间的,提供此标志有助于在需要utc时间的程序中由本地时间推算出utc时间。

以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1