SGPro is designed to ease the burden of multi-night sessions. Part of this implementation allows for the notion of recurring start and end times. In other words, a target or sequence may have an end time at 0400, but there is no specific date attached to that time and this allows the entry to be used day after day without any particular action from the user. The user is not required to visit the end time setting prior to starting every sequence to increment the date. Dates for both sequence / target start and end are relative.


This convenience has an important trade-off. It means that SGPro must determine whether your specified time is in the future or in the past. In order to codify this system, we refer to the underlying measurement as a "Sequence Day". A Sequence Day is defined as the relative 24 hour period where the hours in between start and end of a Sequence Day cover darkness for most users. It is currently non user-adjustable and occurs between the hours of 10:00 and 10:00 the next day.


This is confusing... 


Why can't you just interpret all my times as being in the future? This is a "not uncommon" question and the answer is that SGPro may start, stop, pause or abort the sequence at any time during the night and restarting must behave in a predictable way. For one of a dozen reasons, you may even need to restart your computer and reload the sequence entirely. In these cases, we must be able to consider your user-specified times as possibly being in the past or your sequence would simply not start or might end in mere minutes.


The Rules


The rules for determining if a time is to be considered as "yesterday", "today" or "tomorrow" are semi-arbitrary in that they are not based in science or culture. This decision is made by splitting the Sequence Day into two segments: "past" and "future", relative to the current time of day. The past segment will be defined at the relative time period between the current time and 10:00 going backward in time. The future segment is defined as the time between the current time and the 10:00 (Sequence Day boundary) going forward in time. Once the past and future segments are defined, simply determine to which one the user time belongs.


  • For a target that ends at 23:00, starting the sequence at 23:15 will designate the 23:00 end time as being in the past and the target will be skipped as a result (past its end time). SGPro decided this by splitting the Sequence Day into two segments: past and future. In this case, the past segment will be defined at the relative time period between 23:15 (current time) and 10:00 going backward in time (i.e. 10:00 to 23:15 contains the entirety of the "past" for the current time of day). The future segment is defined as the time between 23:15 (current time) and the 10:00 (Sequence Day boundary) going forward in time (i.e. 23:15 to 10:00). Once the past and future segments are defined, simply determine to which one the user time belongs. In this case, the user time of 23:00 falls into the "past" segment and, when the sequence starts, it will be considered as such and move on to the next target.
  • For a target that ends at 23:00, starting the sequence at 22:45 will designate the 23:00 end time as being in the future and the target will run as expected (before its end time). SGPro decided this by splitting the Sequence Day into two segments: past and future. In this case, the past segment will be defined at the relative time period between 22:45 (current time) and 10:00 going backward in time (i.e. 10:00 to 22:45 contains the entirety of the "past" for the current time of day). The future segment is defined as the time between 22:45 (current time) and the 10:00 (Sequence Day boundary) going forward in time (i.e. 22:45 to 10:00). Once the past and future segments are defined, simply determine to which one the user time belongs. In this case, the user time of 23:00 falls into the "future" segment and, when the sequence starts, it will run.