如何在不同时区使用TimeSpan?

Ana*_*oly 2 c# datetime

我有以下代码scheduleConfiguration.Time在UTC 中接受输入并ticks在本地时间返回。

scheduleConfiguration.Time equal {9/13/2015 10:00:00 AM} in UTC

var localTime = scheduleConfiguration.Time.ToLocalTime(); {9/13/2015 1:00:00 PM} in Local
var executionTime = new TimeSpan(localTime.TimeOfDay.Ticks);
Run Code Online (Sandbox Code Playgroud)

我更改了数据合同scheduleConfiguration.Time,因此我需要使用TimeSpan TimeOfDay而不是DateTime Time,但是我需要拥有相同的合同executionTime。所以我下一步

var local time = DateTime.Now.Date.Add(scheduleConfiguration.TimeOfDay);//{9/13/2015 10:00:00 AM} in Local
var executionTime = new TimeSpan(localTime.Ticks);
Run Code Online (Sandbox Code Playgroud)

所以我有3个小时的时差(我有UTC +3时区)

在第一种情况下,如何获得与DateTime相同的结果?

小智 5

您应该使用SpecifyKind方法。

var time = DateTime.SpecifyKind(DateTime.Now.Date.Add(span), DateTimeKind.Utc);      
Console.WriteLine(time.ToLocalTime());
Run Code Online (Sandbox Code Playgroud)