def finalize_constructs
      # First assign am/pm values to timespan constructs independent of
      # other times in timemap.
      finalize_timespan_constructs

      # Next we need to burn through the time map, find any start times
      # that are not firm, and set them based on previous firm times.
      # Note that @sorted_time_map has the format {date_index => [array, of, time, indices]}
      @sorted_time_map.each_value do |time_indices|
        # The time_indices array holds TimeConstruct and TimeSpanConstruct indices.
        # The time_array will hold an array of ZTime objects to modify (potentially)
        time_array = []
        time_indices.each { |tindex| time_array << start_time_from_tindex(tindex) }
        ZTime.am_pm_modifier(*time_array)
      end

      # Finally, we need to modify the timespans based on the the time info from am_pm_modifier.
      # We also need to guess at any timespans that didn't get any help from am_pm_modifier.
      # i.e. we originally guessed at timespans independently of other time info in time map;
      # now that we have modified start times based on other info in time map, we can refine the
      # end times in our time spans.  If we didn't pick them up before.
      finalize_timespan_constructs(true)
    end
def finalize_constructs
      # First assign am/pm values to timespan constructs independent of
      # other times in timemap.
      finalize_timespan_constructs

      # Next we need to burn through the time map, find any start times
      # that are not firm, and set them based on previous firm times.
      # Note that @sorted_time_map has the format {date_index => [array, of, time, indices]}
      @sorted_time_map.each_value do |time_indices|
        # The time_indices array holds TimeConstruct and TimeSpanConstruct indices.
        # The time_array will hold an array of ZTime objects to modify (potentially)
        time_array = []
        time_indices.each { |tindex| time_array << start_time_from_tindex(tindex) }
        ZTime.am_pm_modifier(*time_array)
      end

      # Finally, we need to modify the timespans based on the the time info from am_pm_modifier.
      # We also need to guess at any timespans that didn't get any help from am_pm_modifier.
      # i.e. we originally guessed at timespans independently of other time info in time map;
      # now that we have modified start times based on other info in time map, we can refine the
      # end times in our time spans.  If we didn't pick them up before.
      finalize_timespan_constructs(true)
    end
One of this methods functions will be to assign proper am/pm values to time
 and timespan constructs if they were not specified.