def time_in(self, seconds=None, sync_to=None, offset=<NUM_LIT:0>):
<EOL>if seconds is self.CACHE_FOREVER:<EOL><INDENT>return self.CACHE_FOREVER<EOL><DEDENT>if seconds is None:<EOL><INDENT>if sync_to and sync_to > <NUM_LIT:0>:<EOL><INDENT>seconds = <NUM_LIT:0><EOL><DEDENT>else:<EOL><INDENT>try:<EOL><INDENT>seconds = self._py3status_module.cache_timeout<EOL><DEDENT>except AttributeError:<EOL><INDENT>seconds = self._module.config["<STR_LIT>"]<EOL><DEDENT><DEDENT><DEDENT>if sync_to is None:<EOL><INDENT>if seconds and seconds < <NUM_LIT:1>:<EOL><INDENT>if <NUM_LIT:1> % seconds == <NUM_LIT:0>:<EOL><INDENT>sync_to = seconds<EOL><DEDENT>else:<EOL><INDENT>sync_to = <NUM_LIT:0><EOL><DEDENT><DEDENT>else:<EOL><INDENT>sync_to = <NUM_LIT:1><EOL>if seconds:<EOL><INDENT>seconds -= <NUM_LIT:0.1><EOL><DEDENT><DEDENT><DEDENT>requested = time() + seconds - offset<EOL>if sync_to:<EOL><INDENT>requested = (requested + sync_to) - (requested % sync_to)<EOL><DEDENT>return requested + offset<EOL>
Returns the time a given number of seconds into the future.  Helpful
for creating the ``cached_until`` value for the module output.

.. note::

    from version 3.1 modules no longer need to explicitly set a
    ``cached_until`` in their response unless they wish to directly control
    it.

:param seconds: specifies the number of seconds that should occur before the
    update is required.  Passing a value of ``CACHE_FOREVER`` returns
    ``CACHE_FOREVER`` which can be useful for some modules.

:param sync_to: causes the update to be synchronized to a time period.  1 would
    cause the update on the second, 60 to the nearest minute. By default we
    synchronize to the nearest second. 0 will disable this feature.

:param offset: is used to alter the base time used. A timer that started at a
    certain time could set that as the offset and any synchronization would
    then be relative to that time.