How do I convert an ISO 8601 datetime into a unix timestamp - at compile-time?
Steven Schveighoffer
schveiguy at gmail.com
Fri Aug 28 12:35:26 UTC 2020
On 8/27/20 9:54 PM, Andrej Mitrovic wrote:
> -----
> import std.datetime;
>
> void main ()
> {
> static time =
> SysTime(DateTime.fromISOString("20220101T000000")).toUnixTime;
> }
> -----
>
> -----
> /Library/D/dmd/src/phobos/std/concurrency.d(2574): Error: static
> variable lock cannot be read at compile time
> /Library/D/dmd/src/phobos/std/concurrency.d(2574): called from
> here: atomicLoad(lock)
> /Library/D/dmd/src/phobos/std/concurrency.d(2600): called from
> here: initOnceLock()
> /Library/D/dmd/src/phobos/std/concurrency.d(2600): called from
> here: initOnce(delegate shared(bool)() pure @nogc @safe => init(),
> initOnceLock())
> /Library/D/dmd/src/phobos/std/datetime/timezone.d(1106): called from
> here: initOnce(delegate shared(bool)() pure nothrow @nogc @safe =>
> (*function () nothrow @nogc @safe => true)())
> /Library/D/dmd/src/phobos/std/datetime/timezone.d(546): called from
> here: (*& singleton)()
> /Library/D/dmd/src/phobos/std/datetime/systime.d(524): called from here:
> opCall()
> /Library/D/dmd/src/phobos/std/datetime/systime.d(472): called from here:
> this.this(dateTime, zero(), tz)
> test.d(6): called from here: SysTime(0L, Rebindable(null,
> )).this(fromISOString("20220101T000000"), null)
> -----
>
> I'm sure there must be a better way to do this. But I couldn't find it
> in the documentation.
It's trying to look up the local timezone at compile time.
You need to specify a time zone:
static time =
SysTime(DateTime.fromISOString("20220101T000000"),
UTC()).toUnixTime;
-Steve
More information about the Digitalmars-d-learn
mailing list