DateTime.ToLocalTime()在哪里获得偏移量

时间:2014-02-22 09:45:34

标签: c# .net

这是一个简单的代码:

System.DateTime dt = new DateTime(635267088000000000);
Console.WriteLine(dt.ToLocalTime());

我在Windows“区域和语言设置”中更改了位置,格式和系统区域设置,但结果没有改变。

我重启了电脑。我使用的是Windows 7。

2 个答案:

答案 0 :(得分:3)

系统Timzone设置位于“日期和时间”控制面板中,而不是“区域和语言”控制面板(令人困惑的是,这也是键盘语言设置的位置,而不是键盘控制面板)。

答案 1 :(得分:2)

奇怪的是......您提供的代码无法识别本地信息,因为您尚未指定本地类型。要利用转换为本地或通用时间,您必须指定DateTime对象的类型:

DateTime dtUtc = new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc);
DateTime dtLocal = dtUtc.ToLocalTime();
Console.WriteLine("{0} - {1}", dtUtc, dtLocal); 

这将输出如下内容:

22/2/2014 10:25:59 - 22/2/2014 14:25:59

请注意,如果您使用DateTime.NowDateTime.UtcNow,则他们已经分别拥有DateTimeKind.LocalDateTimeKind.Utc类型的信息。

DateTime dt = DateTime.Now;
Console.WriteLine(dt.Kind);
dt = DateTime.UtcNow;
Console.WriteLine(dt.Kind);
dt = new DateTime(635267088000000000);
Console.WriteLine(dt.Kind);

输出是:

Local
Utc
Unspecified

探索此示例。

DateTime dt = new DateTime(635267088000000000); // same as DateTimeKind.Unspecified
DateTime dtUtc = dt.ToUniversalTime();
DateTime dtLocal = dt.ToLocalTime();
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal);

dt = new DateTime(635267088000000000, DateTimeKind.Local);
dtUtc = dt.ToUniversalTime();
dtLocal = dt.ToLocalTime();
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal);

dt = new DateTime(635267088000000000, DateTimeKind.Utc);
dtUtc = dt.ToUniversalTime();
dtLocal = dt.ToLocalTime();
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal);