10

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;
1
  • 1
    You should avoid DateTime.Now, and instead use DateTime.UtcNow. DateTime.Now may suprise you one day, with either the wrong time zone, or the wrong daylight savings. Commented Jul 13, 2011 at 16:38

7 Answers 7

15

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);
Sign up to request clarification or add additional context in comments.

Comments

5
    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

Comments

3

This should do the trick

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

Comments

1

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

Comments

0

You can use javascript:

 var visitortime = new Date();
    vat time = visitortime.getTimezoneOffset()/60;

After that you can save this value to any hidden control which is runat ="server".

Comments

0

why not just

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, "AUS Eastern Standard Time");

and check get all available timezones

foreach (TimeZoneInfo tz in TimeZoneInfo.GetSystemTimeZones())
{
    Console.WriteLine(tz.Id);
}

Comments

0
private string IST_DATE(DateTime date)
    {
        if (date != null)
        {
            return TimeZoneInfo.ConvertTimeFromUtc((DateTime)date, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")).ToString("yyyy-MM-dd");

        }
        return "";

    }

1 Comment

Datetimes are structs which cannot be null. You are also casting date to DateTime but it is already declared as Datetime.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.