繁体   English   中英

在C#中更改时区

[英]Change timezone in C#

我有一个日期格式,类似于:

周一,周日,2010年8月22日12:38:33 GMT

如何将其转换为EST格式?

注意:我知道它可以使用TimeZoneinfo实现,但是在3.5中引入,我想要做2.0或任何旧版本。

我想你必须走老路了解时区。 你的例子很简单。

GMT是UTC,具有夏令时变化。
EST为-5小时,夏令时更改。

所以你只需要减去5个小时来获得EST的时间。

最简单的方法可能是花费5个小时的时间。

DateTime dateTime = DateTime.UtcNow;
dateTime.AddHours(-5);

但这不能解释夏令时等问题。但是你可以随时编写这种可能性的代码。

对于Net 2.0和1.1,您可以使用TimeZone类,该类现在已被TimeZoneInfo类替换。

进一步研究后编辑看来,在.NET 3.5之前,所有可用的都是TimeZone类。 无法计算本地和UTC之外的时区的TimeDate值。 因此,如果您希望将时间计算为EST或PST并且您位于英国,那么事情会变得更加困难。

这是一个使用TimeZone的简短演示程序(它来自一个基本的控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        DateTime time = DateTime.UtcNow;
        Console.WriteLine(string.Format("UTC time is {0}", time.ToShortTimeString()));

        TimeZone zone = TimeZone.CurrentTimeZone;

        //The following line depends on a call to TimeZone.GetUtcOffset for NET 1.0 and 1.1
        DateTime workingTime = zone.ToLocalTime(time);
        DisplayTime(workingTime, zone);
        IFormatProvider culture = new System.Globalization.CultureInfo("en-GB", true);
        workingTime = DateTime.Parse("22/2/2010 12:15:32");

        Console.WriteLine();
        Console.WriteLine(string.Format("Historical Date Time is : {0}",workingTime.ToString()));
        DisplayTime(workingTime, zone);
        Console.WriteLine("Press any key to close ...");
        Console.ReadLine();
    }
    static void DisplayTime(DateTime time, TimeZone zone)
    {
        Console.WriteLine(string.Format("Current time zone is {0}", zone.StandardName));
        Console.WriteLine(string.Format("Does this time include Daylight saving? - {0}", zone.IsDaylightSavingTime(time) ? "Yes" : "No"));
        if (zone.IsDaylightSavingTime(time))
        {
            Console.WriteLine(string.Format("So this time locally is {0} {1}", time.ToShortTimeString(), zone.DaylightName));
        }
        else
        {
            Console.WriteLine(string.Format("So this time locally is {0} {1}", time.ToShortTimeString(), zone.StandardName));
        }
        Console.WriteLine(string.Format("Time offset from UTC is {0} hours.", zone.GetUtcOffset(time)));

    }
}

如您所见,它只处理当地时间和UTC。

EST可能不是格式,而是时区的缩写。 即“手动”方式是解析上述日期并减去时区差异。 您应该注意夏令时,即您需要检查上述时间是否符合夏令时期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM