public DateTimeStamp add(double offsetInDecimalSeconds) {
        if (Double.isNaN(offsetInDecimalSeconds))
            throw new IllegalArgumentException("Cannot add " + Double.NaN);

        double adjustedTimeStamp = Double.NaN;
        ZonedDateTime adjustedDateStamp = null;
        if ( hasTimeStamp()) {
            adjustedTimeStamp = getTimeStamp() + offsetInDecimalSeconds;
        }

        if (hasDateStamp()) {
            double offset = (Double.isNaN(offsetInDecimalSeconds)) ? 0.000d : offsetInDecimalSeconds;
            int seconds = (int) offset;
            long nanos = ((long) ((offset % 1) * 1_000L)) * 1_000_000L;
            adjustedDateStamp = dateTime.plusSeconds(seconds).plusNanos(nanos);
        }

        return new DateTimeStamp(adjustedDateStamp, adjustedTimeStamp);
    }
@Test
    void testAddingNaN() {
        assertThrows(IllegalArgumentException.class,
                () -> { new DateTimeStamp("2018-04-04T10:10:00.586-0100").add(Double.NaN); },
                "IllegalAccess Not Thrown");
    }