public function toISOUTC(string $precision = '') : string
    {
        switch ($precision) {
            case '':
                $minor = '';
                break;
            case 'milliseconds':
                $minor = '.' . $this->format('v');
                break;
            case 'microseconds':
                $minor = '.' . $this->format('u');
                break;
            default:
                throw new \InvalidArgumentException(
                    'Arg precision[' . $precision . '] isn\'t empty or value milliseconds|microseconds.'
                );
        }
        return substr(
                (clone $this)->setTimezone(new \DateTimeZone('UTC'))->format('c'),
                0,
                -6
            ) . $minor . 'Z';
    }