<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_time_array(self, datetime_simulation_start=None, simulation_time_step_seconds=None, return_datetime=False, time_index_array=None):
 """ This method extracts or generates an array of time. The new version of RAPID output has the time array stored. However, the old version requires the user to know when the simulation began and the time step of the output. Parameters datetime_simulation_start: :obj:`datetime.datetime`, optional The start datetime of the simulation. Only required if the time variable is not included in the file. simulation_time_step_seconds: int, optional The time step of the file in seconds. Only required if the time variable is not included in the file. return_datetime: bool, optional If true, it converts the data to a list of datetime objects. Default is False. time_index_array: list or :obj:`numpy.array`, optional This is used to extract the datetime values by index from the main list. This can be from the *get_time_index_range* function. Returns ------- list: An array of integers representing seconds since Jan 1, 1970 UTC or datetime objects if *return_datetime* is set to True. These examples demonstrates how to retrieve or generate a time array to go along with your RAPID streamflow series. CF-Compliant Qout File Example: .. code:: python from RAPIDpy import RAPIDDataset path_to_rapid_qout = '/path/to/Qout.nc' with RAPIDDataset(path_to_rapid_qout) as qout_nc: #retrieve integer timestamp array time_array = qout_nc.get_time_array() #or, to get datetime array time_datetime = qout_nc.get_time_array(return_datetime=True) Legacy Qout File Example: .. code:: python from RAPIDpy import RAPIDDataset path_to_rapid_qout = '/path/to/Qout.nc' with RAPIDDataset(path_to_rapid_qout, datetime_simulation_start=datetime(1980, 1, 1), simulation_time_step_seconds=3 * 3600)\ as qout_nc: #retrieve integer timestamp array time_array = qout_nc.get_time_array() #or, to get datetime array time_datetime = qout_nc.get_time_array(return_datetime=True) """

        # Original Qout file
        if datetime_simulation_start is not None:
            self.datetime_simulation_start = datetime_simulation_start
        if simulation_time_step_seconds is not None:
            self.simulation_time_step_seconds = simulation_time_step_seconds

        epoch = datetime.datetime(1970, 1, 1, tzinfo=utc)
        time_units = "seconds since {0}".format(epoch)

        # CF-1.6 compliant file
        if self.is_time_variable_valid():
            time_array = self.qout_nc.variables['time'][:]
            if self.qout_nc.variables['time'].units:
                time_units = self.qout_nc.variables['time'].units

        # Original Qout file
        elif self._is_legacy_time_valid():
            initial_time_seconds = ((self.datetime_simulation_start
                                    .replace(tzinfo=utc) - epoch)
                                    .total_seconds() +
                                    self.simulation_time_step_seconds)
            final_time_seconds = (initial_time_seconds +
                                  self.size_time *
                                  self.simulation_time_step_seconds)
            time_array = np.arange(initial_time_seconds,
                                   final_time_seconds,
                                   self.simulation_time_step_seconds)
        else:
            raise ValueError("This file does not contain the time"
                             " variable. To get time array, add"
                             " datetime_simulation_start and"
                             " simulation_time_step_seconds")

        if time_index_array is not None:
            time_array = time_array[time_index_array]

        if return_datetime:
            time_array = num2date(time_array, time_units)

            if self.out_tzinfo is not None:
                for i in xrange(len(time_array)):
                    # convert time to output timezone
                    time_array[i] = utc.localize(time_array[i]) \
                                       .astimezone(self.out_tzinfo) \
                                       .replace(tzinfo=None)

        return time_array