C# Datetimes: Conversion for different time zones

13,596

Solution 1

Use the TimeZoneInfo Class to convert a local time to a time in an alternative timezone:

TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime targetTime = TimeZoneInfo.ConvertTime(timeToConvert, est);

Solution 2

    var now = DateTime.Now; // Current date/time
    var utcNow = now.ToUniversalTime(); // Converted utc time
    var otherTimezone = TimeZoneInfo.FindSystemTimeZoneById("ANY OTHER VALID TIMEZONE"); // Get other timezone
    var newTime = TimeZoneInfo.ConvertTimeFromUtc(utcNow, otherTimezone); // New Timezone

Solution 3

This should do the trick

DateTime localTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, TimeZoneInfo.Local);

Solution 4

Use TimeZoneInfo.ConvertTimeFromUtc. The example listed there is pretty self explanatory.

Share:
13,596
Soatl
Author by

Soatl

I am a polyglot developer with a Masters in Computer Science from Georgia Tech. I focus on full-stack development and enjoy learning about cybersecurity principles and machine learning. I also have experience with big data as well as DevOps. #SOreadytohelp

Updated on June 21, 2022

Comments

  • Soatl
    Soatl almost 2 years

    I have a bunch of date times that I keep track of for my app. They are all in UTC time. For part of my app I want to send an email with one of these times, but edited to be in that specific time zone.

    There are only two major areas that I will deal with, the east coast and Texas (Dallas and Huston)

    I can also make a new datetime when I send out this email to get the eastern time zone (DateTime timestamp = DateTime.Now;)

    My Question is this:

    If the user is in the texas area how can I convert my time from eastern to that time (1 hour less)?

    I tried something like this:

                //Convert timestamp to local time
                TimeSpan ts = TimeZone.CurrentTimeZone.GetUtcOffset(timestamp);
                timestamp.Add(ts);
    
                timestampString = timestamp.ToString();
    

    But that didn't work. I also know that this line is not valid:

    timestamp.Hour = timestamp.Hour - 1;
    
  • Marie
    Marie about 2 years
    Datetimes are structs which cannot be null. You are also casting date to DateTime but it is already declared as Datetime.