C# UTC至用户';s当地时间

C# UTC至用户';s当地时间,c#,timezone,C#,Timezone,我正在创建一个web应用程序,它将显示应用程序中发生的各种事件的日期(例如,正在生成的文档)。当然,显示的日期需要考虑用户所在的位置(而不仅仅是盲目地输出存储的日期,因为这将是服务器本地时间) 我制作了一个示例应用程序,它列出了所有时区,允许您选择一个时区,然后在所选时区中输出一些存储的UTC日期,并在时区观测DST时添加一小时 我的问题是:这是一种最佳的方法吗?或者我是否错过了一些在所有情况下都不能用这种方法的地方 static void Main(string[] args) { List

我正在创建一个web应用程序,它将显示应用程序中发生的各种事件的日期(例如,正在生成的文档)。当然,显示的日期需要考虑用户所在的位置(而不仅仅是盲目地输出存储的日期,因为这将是服务器本地时间)

我制作了一个示例应用程序,它列出了所有时区,允许您选择一个时区,然后在所选时区中输出一些存储的UTC日期,并在时区观测DST时添加一小时

我的问题是:这是一种最佳的方法吗?或者我是否错过了一些在所有情况下都不能用这种方法的地方

static void Main(string[] args)
{
 List<DateTime> events = new List<DateTime>();

 events.Add(DateTime.UtcNow);
 events.Add(DateTime.UtcNow.AddDays(1));
 events.Add(DateTime.UtcNow.AddDays(7));

    var timeZones = TimeZoneInfo.GetSystemTimeZones();

 for (var i = 0; i < timeZones.Count; i++)
 {
  Console.WriteLine(i + " : " + timeZones[i].DisplayName);
 }

 var currentZone = timeZones[Convert.ToInt32(Console.ReadLine())];

 Console.WriteLine("UTC Event: {0}", events[0]);
 Console.WriteLine("Local Event: {0}", correct(events[0], currentZone));

 Console.ReadKey();
}

static DateTime correct(DateTime date, TimeZoneInfo timeZone)
{
 var correctedDate = date.AddHours(timeZone.BaseUtcOffset.TotalHours);

 if (timeZone.IsDaylightSavingTime(date))
 {
  return correctedDate.AddHours(1);
 }

 return correctedDate;
}
static void Main(字符串[]args)
{
列表事件=新列表();
添加(DateTime.UtcNow);
events.Add(DateTime.UtcNow.AddDays(1));
events.Add(DateTime.UtcNow.AddDays(7));
var timeZones=TimeZoneInfo.GetSystemTimeZones();
对于(var i=0;i

我从输出中得到了我期望的结果,我只是担心时区这个复杂的问题不能这么简单地解决。

比这简单得多:)

使用-您不需要自己处理偏移:)(特别是,您当前的代码假设DST差正好为一小时,这并不总是正确的。)


您可能希望使用
DateTimeOffset
,以避免在不在UTC的情况下认为某些东西在UTC中。

太好了,非常感谢。没有什么比删除代码(特别是有缺陷的代码)更令人愉快的了: