Since i’m getting a lot of google hits on my Dynamics Ax – workdays to days post, i’ve decided to blog some more about it. The DateTimeUtil class is actually a wrapper of the .NET DateTime class.
A first thing to remember when using UtcDateTime EDT’s is that it is stored like the name says as Coordinated Universal Time.
The controls on the form will translate the DateTime to the timezone of the client. Now keeping this in mind is very important when mixing date, time and datetime controls. The following example will make it more clear.
The first field is a UtcDateTimeEdit control with a data method that returns DateTimeUtil::UtcNow().
As you can see the time is 08:58, but the first control on the form shows 10:58. This is correct because my client timezone is (GMT+01:00) Brussel, Kopenhagen, Madrid, Parijs and it’s summer time.
The second field is a TimeEdit control with a data method that returns DateTimeUtil::time(DateTimeUtil::utcNow()), this isn’t correct because it will always return the time in the UTC timezone and the control will not translate it to the correct timezone.
The third field is another TimeEdit control with a data method that returns TimeNow(), this is correct because the TimeNow method will also apply the client/server (depending on the tier) timezone.
this also applies to field in a table.
Another way to use Time controls and the DateTimeUtil is using the applyTimeZoneOffset method.
UtcDateTime ret;
;
ret = DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::utcNow(),TimeZone::GMTPLUS0100BRUSSELS_COPENHAGEN_MADRID);
return DateTimeUtil::time(ret);
Code language: PHP (php)
but this is a lot of code for a rather more simple thing 🙂
A second thing to remember, when querying with a date on UtcDateTime fields make sure you select the whole day from 00:00:00 to 23:59:59.
For this I like to implement a method on the Global class, it’s keeps you’re queries cleaner 😉 It works the same way as all .NET developers use, Add a with time 0 and subtract a second.
static UtcDateTime dateCompare(date _date,
boolean _toDate = false)
{
UtcDateTime ret;
;
if(_toDate)
{
ret = DateTimeUtil::addSeconds(DateTimeUtil::newDateTime(_date + 1,0),-1);
}
else
{
ret = DateTimeUtil::newDateTime(_date,0);
}
return ret;
}
Code language: PHP (php)
So you’re query looks like this.
Date currectDate = SystemDateGet();
SalesLine salesLine;
;
while select salesLine
where salesLine.createdDateTime >= dateCompare(currectDate)
&& salesLine.createdDateTime <= dateCompare(currectDate,true)
{
//Do something
}
Code language: JavaScript (javascript)
2 responses to “Dynamics Ax 2009 using the DateTimeUtil”
A small added, for select the correct time zone for each company (If you work with more than one), you can use DateTimeUtil::getCompanyTimeZone. The method posted by Kevin could be
UtcDateTime ret;
;
ret = DateTimeUtil::applyTimeZoneOffset(DateTimeUtil::utcNow(),DateTimeUtil::getCompanyTimeZone());
return DateTimeUtil::time(ret);
Thanks for the information, I found it very useful
Thanks man, it helped me a lot.