I was working with a schema this week that had an <xs:date> type in it. I loaded the schema into BizTalk and set the <xs:date> field to be a distinguished property. When accessing the property I noticed that it had converted the xs:date property to a System.DateTime type.
What had happened was that the date had been converted to UTC format behind the scenes; From the bizTalk docs (If the datetime format does not specify time zone or UTC format, the time is assumed to be local and is converted to UTC based on the current time zone.)
e.g. Say the date that was passed in was ‘2004-10-26’ when I accessed it by the distinguished property it’s value was ‘2004-10-25 11:00:00’ (UTC-13) - New Zealand timezone… therefore “distinguishedDeliveryDate.ToString("dd/MM/yyyy",System.Globalization.CultureInfo.InvariantCulture)” returned 25/10/2004 instead of what I was looking for 26/10/2004.
The solution:
Convert the datetime back from UTC datetime to local datetime using something similar to:
distinguishedDeliveryDate = distinguishedDeliveryDate.Add(TimeZone.CurrentTimeZone.GetUtcOffset(distinguishedDeliveryDate));
VOLA