4.1 DateTime support
This sample will introduce how to support DateTime type in Web API OData V4.
Build DateTime Type
OData V4 doesn’t include DateTime as primitive type. Web API OData V4 uses DateTimeOffset to represent the DateTime. For example, if user defines a model as:
public class Customer
{
public int Id { get; set; }
public DateTime Birthday { get; set; }
}
The metadata document for Customer entity type will be:
<EntityType Name="Customer">
<Key>
<PropertyRef Name="Id" />
</Key>
<Property Name="Id" Type="Edm.Int32" Nullable="false" />
<Property Name="Birthday" Type="Edm.DateTimeOffset" Nullable="false" />
</EntityType>
Time Zone Configuration
By Default, converting between DateTimeOffset and DateTime will lose the Time Zone information. Therefore, Web API provides a API to config the Time Zone information on server side. For example:
HttpConfiguration configuration = ...
TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); // -8:00
configuration.SetTimeZoneInfo(timeZoneInfo);
$filter DateTime
Since Web API OData 5.6, it supports to filter on DateTime type. For example:
GET ~/Customers?$filter=Birthday lt cast(2015-04-01T04:11:31%2B08:00,Edm.DateTimeOffset)
GET ~/Customers?$filter=year(Birthday) eq 2010
$orderby DateTime
Since Web API OData 5.6, it supports to orderby on DateTime type. For example:
GET ~/Customers?$orderby=Birthday
GET ~/Customers?$orderby=Birthday desc
Thanks.