0

我有一个DateTime对象:

Dim MyDate As DateTime = New DateTime(2013, 11, 6, 8, 30, 0)

接下来我有一个DataTablewhere 第一列是DateTime. 当我将此表序列化为二进制文件,然后从文件反序列化为 时DataTable,一切正常。

我的问题是,如果我在具有不同 UTC(例如 UTC+8)的 PC 上用日期序列化此表,并在具有 UTC+1 的 PC 上反序列化此表,则时间不是 8:30(如代码片段所示)而是 1 :30。你能告诉我,无论在 PC 上设置什么 UTC,我怎样才能达到相同的时间?我也试过这个:

Dim MyDate As DateTime = New DateTime(2013, 11, 6, 8, 30, 0, DateTimeKind.Local)

或者:

MyDate.ToLocalTime()

仍然一无所有。谢谢你。

4

1 回答 1

0

问题是当您序列化日期时间时,日期时间将转换为等效的 utc 时间并附加偏移量。因此,当您在不同的 utc 上对其进行反序列化时,会添加不同的 utc。

黄金法则是始终使用 UTC(世界各地的 UTC 时间相同)并且转换应该是动态的。

像 datetime now = datetime.now.touniversal;

现在序列化

现在在任何 utc 上反序列化(这将是本地等效的)

于 2013-11-06T07:43:23.100 回答