我已經創建了一些代碼來將雙精度日期時間值&轉換爲另一個時區。它給出的行爲我只是不明白什麼時候使用DateTimeKind.Local來代替DateTimeKind.Unspecified。將雙精度日期和時間值轉換爲另一個時區?
我的想法是,傳入方法ConvertTime的雙精度值完全與其地理上下文無關。當然,爲了正確地轉換時間,有必要指定該值是當地時間並屬於某個時區?
我試圖確定本地源時間已正確轉換爲本地目標時間,並觀察夏令時,而不考慮主機的時區設置。
從這個概念我嘗試以指定
DateTime sourceDT = DateTime.SpecifyKind(inDT, DateTimeKind.Local);
但這會導致不被轉換的時間工作。如果我指定
DateTime sourceDT = DateTime.SpecifyKind(inDT, DateTimeKind.Unspecified);
然後發生轉換。
有人可以請解釋爲什麼DateTimeKind.Local不被接受爲時間轉換中的有效規範以及如何實現我正在嘗試的內容。
namespace ConvertTime
{
public interface ConvertTimeClass
{
double ConvertTime(double inTime, [MarshalAs(UnmanagedType.LPStr)] string sourceTZ, [MarshalAs(UnmanagedType.LPStr)] string destTZ);
}
public class ManagedClass : ConvertTimeClass
{
public double ConvertTime(double inTime, [MarshalAs(UnmanagedType.LPStr)] string sourceTZ, [MarshalAs(UnmanagedType.LPStr)] string destTZ)
{
DateTime inDT = DateTime.FromOADate(inTime);//convert decimal date and time value to a DateTime object.
DateTime sourceDT = DateTime.SpecifyKind(inDT, DateTimeKind.Unspecified);//specify that the time represents a local time and save into a new object.
TimeZoneInfo sourceTZI = TimeZoneInfo.FindSystemTimeZoneById(sourceTZ);
TimeZoneInfo destTZI = TimeZoneInfo.FindSystemTimeZoneById(destTZ);
DateTime destDT = TimeZoneInfo.ConvertTime(sourceDT, sourceTZI, destTZI);//convert time. FAILS WHEN DateTimeKind.Local is specified
double outTime = destDT.ToOADate();//extract the decimal date & time value
return outTime;
}
}
}