本地时间到UTC保持DST
我有一个数据网格是使用来自UTC值转换为本地时间的DateTime列进行排序的。问题在于DST,因为在一年中有1个小时将会重复(从11月6日2:00:00 AM返回到1:00:00 AM)。我已经实现了一种方法来使用从IComparable继承的类来比较列,并手动比较使用ToUniversalTime()再次转换它们的日期,但它会返回错误的值。以更好地解释让我给个例子:本地时间到UTC保持DST
DataTable table = new DataTable();
table.Columns.Add("UTC Date", typeof(DateTime));
table.Columns.Add("Local Date", typeof(DateTime));
table.Columns.Add("UTC From Local", typeof(DateTime));
dataGridView1.DataSource = table;
DateTime aux;
DataRow newRow = table.NewRow();
aux = new DateTime(2016, 11, 06, 06, 30, 0, DateTimeKind.Utc);
newRow["UTC Date"] = aux;
newRow["Local Date"] = aux.ToLocalTime();
newRow["UTC From Local"] = Convert.ToDateTime(newRow["Local Date"]).ToUniversalTime(); table.Rows.Add(newRow);
显示的值将是:
UTC日期:2016年11月6日6:30 AM
本地日期:2016年11月6日上午1:30
UTC从地方:2016年11月6日上午7:30
正如你可以看到列“UTC从本地”是错误的,或者至少我希望6:30(DST考虑)而不是7:30(不含DST)。
任何帮助?????
你必须牢记的DataColumn的DateTimeMode财产。如果您创建新的DataColumn
它将设置为未指定。但是,在您的使用情况下,你想UTC和本地
var table = new DataTable();
table.Columns.Add("UTC Date", typeof(DateTime)).DateTimeMode = DataSetDateTime.Utc;
table.Columns.Add("Local Date", typeof(DateTime)).DateTimeMode = DataSetDateTime.Local;
table.Columns.Add("UTC From Local", typeof(DateTime)).DateTimeMode = DataSetDateTime.Utc;
var newRow = table.NewRow();
var aux = new DateTime(2016, 11, 06, 06, 30, 0, DateTimeKind.Utc);
newRow["UTC Date"] = aux;
newRow["Local Date"] = aux.ToLocalTime();
newRow["UTC From Local"] = Convert.ToDateTime(newRow["Local Date"]).ToUniversalTime();
也许你可以尝试让GTM偏移并将其添加到您的“UTC从本地”:
aux = new DateTime(2016, 11, 06, 06, 30, 0, DateTimeKind.Utc);
newRow["UTC Date"] = aux;
newRow["Local Date"] = aux.ToLocalTime();
TimeSpan UtcOffset = TimeZone.CurrentTimeZone.GetUtcOffset(aux);
newRow["UTC From Local"] = Convert.ToDateTime(newRow["Local Date"].Add(UtcOffset)).ToUniversalTime();
我不明白。你在UTC调用'GetUtcOffset'?你能指望什么? –
我猜在UTC调用'GetUtcOffset'会得到0,无论如何也从DST的日期得到相同的偏移距日期DST。我相信唯一的区别是调用'IsDaylightSavingTime()' –
非常感谢!它的工作,让我尝试实现这个解决方案的真正的应用程序,因为我发布的只是一个例子。所以通过阅读你的解决方案,我可以假设使用'ToLocalTime()'不会丢失DST信息,问题是在创建DataTable时我没有指定'DateTimeMode' –