Representation of a DateTime as the local to remote user

Posted by TwoSecondsBefore on Stack Overflow See other posts from Stack Overflow or by TwoSecondsBefore
Published on 2013-10-17T21:28:48Z Indexed on 2013/10/17 21:53 UTC
Read the original article Hit count: 188

Hello!

I was confused in the problem of time zones. I am writing a web application that will contain some news with dates of publication, and I want the client to see the date of publication of the news in the form of corresponding local time. However, I do not know in which time zone the client is located.

I have three questions.

I have to ask just in case: does DateTimeOffset.UtcNow always returns the correct UTC date and time, regardless of whether the server is dependent on daylight savings time? For example, if the first time I get the value of this property for two minutes before daylight savings time (or before the transition from daylight saving time back) and the second time in 2 minutes after the transfer, whether the value of properties in all cases differ by only 4 minutes? Or here require any further logic? (Question #1)

Please see the following example and tell me what you think.

I posted the news on the site. I assume that DateTimeOffset.UtcNow takes into account the time zone of the server and the daylight savings time, and so I immediately get the correct UTC server time when pressing the button "Submit". I write this value to a MS SQL database in the field of type datetime2(0).

Then the user opens a page with news and no matter how long after publication. This may occur even after many years. I did not ask him to enter his time zone. Instead, I get the offset of his current local time from UTC using the javascript function following way:

function GetUserTimezoneOffset()
{
var offset = new Date().getTimezoneOffset();
return offset;
}

Next I make the calculation of the date and time of publication, which will show the user:

public static DateTime Get_Publication_Date_In_User_Local_DateTime(
    DateTime Publication_Utc_Date_Time_From_DataBase,
    int User_Time_Zone_Offset_Returned_by_Javascript)
{
    int userTimezoneOffset = User_Time_Zone_Offset_Returned_by_Javascript; // For
        // example Javascript returns a value equal to -300, which means the
        // current user's time differs from UTC to 300 minutes. Ie offset
        // is UTC +6. In this case, it may be the time zone UTC +5 which
        // currently operates summer time or UTC +6 which currently operates the
        // standard time.
        // Right? (Question #2)

    DateTimeOffset utcPublicationDateTime =
        new DateTimeOffset(Publication_Utc_Date_Time_From_DataBase,
            new TimeSpan(0)); // get an instance of type DateTimeOffset for the
                // date and time of publication for further calculations

    DateTimeOffset publication_DateTime_In_User_Local_DateTime =
       utcPublicationDateTime.ToOffset(new TimeSpan(0, - userTimezoneOffset, 0));

    return publication_DateTime_In_User_Local_DateTime.DateTime;// return to user
}

Is the value obtained correct? Is this the right approach to solving this problem? (Question #3)

© Stack Overflow or respective owner

Related posts about c#

Related posts about JavaScript