What's the right format for creating a Iso8601DateTime attribute?

Hi,

I’m getting a validation error for:

attribute dateOfBirth: Iso8601DateTime = new Iso8601DateTime("1926-04-03T00:00:00");

attribute dateOfDeath: Iso8601DateTime = new Iso8601DateTime("1967-01-27");

ScalarValues::String does not conform to Time::Iso8601DateTimeEncoding

Looks like I can’t pass a string.

Thanks,

Robert

Hi Robert,

This lint is telling you that you must construct an Iso8601DateTimeEncoding to create an Iso8601DateTime. See the standard library documentation at SysML-v2-Release/sysml.library/Domain Libraries/Quantities and Units/Time.sysml at 123ef05f5bf237bf277093182eb34a967fccdabf · Systems-Modeling/SysML-v2-Release · GitHub .

For ways to create and not create an Iso8601DateTime, look at the following package:

package DateTimeAttributeTest {
    public import ScalarValues::*;
    public import Time::*;

    // --- BAD: string literal passed directly to Iso8601DateTime constructor.
    // Produces: ScalarValues::String does not conform to Time::Iso8601DateTimeEncoding
    attribute badBirth : Iso8601DateTime = new Iso8601DateTime("1926-04-03T00:00:00Z");

    // --- CANDIDATE A: wrap the string in an Iso8601DateTimeEncoding constructor,
    // then pass positionally to Iso8601DateTime.
    attribute candidateA : Iso8601DateTime = new Iso8601DateTime(
        new Iso8601DateTimeEncoding("1926-04-03T00:00:00Z")
    );

    // --- CANDIDATE B: redefine `val` inline using :>>.
    attribute candidateB : Iso8601DateTime {
        :>> val = new Iso8601DateTimeEncoding("1926-04-03T00:00:00Z");
    }

    // --- CANDIDATE C: bare string in :>> binding also fails.
    // Iso8601DateTimeEncoding :> String means Iso8601DateTimeEncoding is a subtype of String,
    // so a String literal is not assignable to Iso8601DateTimeEncoding regardless of binding context.
    attribute candidateC : Iso8601DateTime {
        :>> val = "1926-04-03T00:00:00Z";
    }
}

Regards,

Adam Layne, PhD

Great @Adam_Layne , Thanks!
Candidate B works

Robert,

Happy to help. By the way, you can interpret this warning like a type error in a programming language.

ScalarValues::String does not conform to Time::Iso8601DateTimeEncoding

means something like

Couldn't match type ‘ScalarValues::String’ with ‘Time::Iso8601DateTimeEncoding’
      Expected: Time::Iso8601DateTimeEncoding
        Actual: ScalarValues::String

Adam