Источник:
http://dev.goshoom.net/en/2019/02/st...r-utcdatetime/
==============
I’ve run into a problem that reminded me that while X++ types and corresponding CLR types (such as
str and
System.String) can often be user interchangeably, they aren’t the same.
I was trying to convert a
utcdatetime value to
the standard “sortable” format in D365FO, for which I wrote the following code:
utcdatetime currentDateTime = DateTimeUtil::utcNow();str s = System.String::Format('{0:s}', currentDateTime);
What I expected was something like
2019-02-03T17:29:00, but I got a very different format –
02/03/2019 17:29:00. What was wrong with my code?
The format definition is all right… but I don’t have the right type! I can easily fix the problem by declaring
currentDateTime as
System.DateTime instead of
utcdatetime.
System.DateTime currentDateTime = DateTimeUtil::utcNow();str s = System.String::Format('{0:s}', currentDateTime);
When
Format() method is called, it’s able to utilize special formatting options (such as the “s” format), if the type of the value has methods that knows what do to it with it.
System.DateTime knows what to do, but
utcdatetime is actually
Microsoft.Dynamics.Ax.Xpp.AxShared.utcdatetime structure which isn’t able to handle these options. It has a single hard-coded format for converting the datetime value to a string.
While I’m still working with the same value in both
utcdatetime and
System.DateTime, they’re two different types with different behavior and a conversion may be needed if I need behavior specific to only one of them.
I tested this behavior on Platform Update 22 and 24.
Источник:
http://dev.goshoom.net/en/2019/02/st...r-utcdatetime/