Date and Time Manipulation

Datetime cycling suites inevitably involve performing some form of datetime arithmetic. For example, in a Cylc task we can calculate the cycle point three hours before the present cycle using:

cylc cyclepoint --offset-hours=-3

The isodatetime command provides functionality beyond cylc cyclepoint. Rose also provides the ROSE_DATAC environment variable which provides an easy way to get the path of the share/cycle directory.

The isodatetime Command

The isodatetime command provides functionality for:

  • Parsing and formatting datetimes e.g:

    $ isodatetime 12-31-2000 --parse-format='%m-%d-%Y'
    12-31-2000
    $ isodatetime 12-31-2000 --parse-format='%m-%d-%Y' --format='DD-MM-CCYY'
    31-12-2000
    
  • Adding offsets to datetimes e.g:

    $ isodatetime 2000-01-01T00:00Z --offset '+P1M'
    2000-02-01T00:00Z
    
  • Calculating the duration between two datetimes e.g:

    $ isodatetime 2000 2001  # Note - 2000 was a leap year!
    P366D
    

See the isodatetime --help command reference for more information.

Using isodatetime In A Suite

In datetime cycling suites, isodatetime can work with the cyclepoint using the CYLC_TASK_CYCLE_POINT environment variable:

[runtime]
    [[hello_america]]
        script = isodatetime $CYLC_TASK_CYCLE_POINT --format='MM-DD-CCYY'

Alternatively, Cylc automatically sets the ISODATETIMEREF environment variable which allows you to use the special ref argument:

[runtime]
    [[hello_america]]
        script = isodatetime ref --format='MM-DD-CCYY'

The ROSE_DATAC Environment Variable

There are two locations where task output is likely to be located:

The work directory

Each task is executed within its work directory which is located in:

<run directory>/work/<cycle>/<task-name>

The path to a task’s work directory can be obtained from the CYLC_TASK_WORK_DIR environment variable.

The share directory

The share directory serves the purpose of providing a storage place for any files which need to be shared between different tasks.

Within the share directory data is typically stored within cycle subdirectories i.e:

<run directory>/share/cycle/<cycle>

These are called the share/cycle directories.

The path to the root of the share directory is provided by the CYLC_WORKFLOW_SHARE_DIR environment variable so the path to the cycle subdirectory would be:

"$CYLC_WORKFLOW_SHARE_DIR/cycle/$CYLC_TASK_CYCLE_POINT"

The rose task-env command provides the environment variable ROSE_DATAC which is a more convenient way to obtain the path of the share/cycle directory.

To get the path to a previous (or a future) share/cycle directory we can provide an offset to rose task-env e.g:

rose task-env --cycle-offset=PT1H

The path is then made available as the ROSE_DATACPT1H environment variable.