As we get the date from the CRM in UTC Format so we can convert it to User’s Local DateTime using LocalTimeFromUtcTimeRequest Request.
To get the Current logged in user’s Local time You need to first retrieve the Time Zone code of that user using RetrieveCurrentUsersSettings request and then you need to convert the UTC date into user’s Local DateTime.
We can also convert the Date from Local Datetime format to the UTC Datetime Format.
Below examples illustrates how to write LocalTimeFromUtcTimeRequest and UtcTimeFromLocalTimeRequest request to convert the Date.
Example :
First retrieve the time zone code from UserSettings entity and then excecute request LocalTimeFromUtcTimeRequest to convert the DateTime from UTC Format to Local DateTime format and UtcTimeFromLocalTimeRequest to convert the DateTime from Local to UTC DateTime format as given below.
DateTime convertDate = new DateTime();
//get the Time Zone Code of user
int? getTimeZoneCode = RetrieveCurrentUsersSettings(service);
//Convert the UTC Date time into Users Local DateTime Format using request LocalTimeFromUtcTimeRequest
DateTime localDateTime = RetrieveLocalTimeFromUTCTime(convertDate, getTimeZoneCode, service);
//Convert the Local Date time into UTC DateTime Format using request UtcTimeFromLocalTimeRequest
DateTime utcDateTime = RetrieveUTCTimeFromLocalTime(convertDate, getTimeZoneCode, service);
/// <summary>
/// Retrieves the current users timezone code
/// </summary>
/// <param name="service"> IOrganizationService </param>
/// <returns></returns>
private int? RetrieveCurrentUsersSettings(IOrganizationService service)
{
var currentUserSettings = service.RetrieveMultiple(
new QueryExpression("usersettings")
{
ColumnSet = new ColumnSet("timezonecode"),
Criteria = new FilterExpression
{
Conditions =
{
new ConditionExpression("systemuserid", ConditionOperator.EqualUserId)
}
}
}).Entities[0].ToEntity<Entity>();
//return time zone code
return (int?)currentUserSettings.Attributes["timezonecode"];
}
/// <summary>
/// Retrive the local time from the UTC time.
/// </summary>
/// <param name="utcTime">UTC Date time which needs to convert to Local DateTime</param>
/// <param name="timeZoneCode">TimeZoneCode</param>
/// <param name="service">IOrganizationService service</param>
/// <returns></returns>
private DateTime RetrieveLocalTimeFromUTCTime(DateTime utcTime, int? timeZoneCode, IOrganizationService service)
{
if (!timeZoneCode.HasValue)
return DateTime.Now;
var request = new LocalTimeFromUtcTimeRequest
{
TimeZoneCode = timeZoneCode.Value,
UtcTime = utcTime.ToUniversalTime()
};
var response = (LocalTimeFromUtcTimeResponse)service.Execute(request);
return response.LocalTime;
}
/// <summary>
/// Retrive the UTC DateTime from Local Date time format.
/// </summary>
/// <param name="localTime">Local Date time which needs to convert to UTC</param>
/// <param name="timeZoneCode">TimeZoneCode</param>
/// <param name="service">IOrganizationService service</param>
/// <returns></returns>
private DateTime RetrieveUTCTimeFromLocalTime(DateTime localTime, int? timeZoneCode, IOrganizationService service)
{
if (!timeZoneCode.HasValue)
return DateTime.Now;
var request = new UtcTimeFromLocalTimeRequest
{
TimeZoneCode = timeZoneCode.Value,
LocalTime = localTime
};
var response = (UtcTimeFromLocalTimeResponse)service.Execute(request);
return response.UtcTime;
}