0
我正在创建一个Web应用程序,它将显示应用程序中发生的各种事件的日期(例如正在生成的文档)。当然,显示的日期需要考虑用户所在的位置(不只是盲目地输出存储的日期,因为这将是服务器本地时间)。UTC到用户的当地时间
我已经制作了一个示例应用程序,列出了所有时区,让您选择一个,然后在您选择的时区输出一些存储的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;
}
我得到了我期望从输出中得到的结果,我只是担心复杂的时区问题不可能如此简单地解决。
非常好,非常感谢。没有比删除代码更令人满意的了(尤其是那些有缺陷的):) – Martin 2010-08-09 11:43:22