开发者

C# Datetimes: Conversion for different time zones

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);

            timestampStrin开发者_运维问答g = timestamp.ToString();

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

timestamp.Hour = timestamp.Hour - 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);


    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


This should do the trick

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


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


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".


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);
}


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

        }
        return "";

    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜