提问人:Zaheer Ahmed 提问时间:5/8/2013 最后编辑:CommunityZaheer Ahmed 更新时间:3/4/2020 访问量:39714
DateTime 未指定的种类
DateTime Unspecified Kind
问:
因此,如果 Kind 未指定 DateTime 为 UTC,但在同一页面上(给出示例):
class Sample
{
public static void Main()
{
DateTime saveNow = DateTime.Now;
myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified);
Display("Unspecified: .....", myDt);
}
public static string datePatt = @"M/d/yyyy hh:mm:ss tt";
public static void Display(string title, DateTime inputDt)
{
DateTime dispDt = inputDt;
string dtString;
dtString = dispDt.ToString(datePatt);
Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind);
dispDt = inputDt.ToLocalTime();
dtString = dispDt.ToString(datePatt);
Console.WriteLine(" ToLocalTime: {0}, Kind = {1}", dtString, dispDt.Kind);
dispDt = inputDt.ToUniversalTime();
dtString = dispDt.ToString(datePatt);
Console.WriteLine(" ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind);
Console.WriteLine();
}
}
}
给出的输出为:
未指定:.....2005 年 5 月 6 日下午 02:34:42,种类 = 未指定
ToLocalTime:2005 年 5 月 6 日上午 07:34:42,种类 = 本地
ToUniversalTime: 2005/5/6 21:34:42, 种类 = UTC
所以,我遇到的问题是,如果 Unspecified 是 UTC,那么为什么 Utc 到 Utc 的转换会更改日期时间对象值?
答:
不,Unspecified 和 UTC 有很大不同 - 您引用的页面来自 .关键是,如果您使用 “unspecified” 调用,则该值将被视为在 UTC 中。ToLocalTime
ToLocalTime
DateTime
同样,如果您使用 “unspecified” 进行调用,则该值将被视为在系统本地时区中。ToUniversalTime
DateTime
坦率地说,这种事情就是我非常不喜欢 DateTime
的原因。如果我是你,我会改用 Noda Time,它将概念完全分成不同的类型,消除了很多混淆。(还有更多类型需要了解,但每种类型都代表一个概念。不过,我显然有偏见......
评论
DateTimeKind.Unspecified 在不希望将时间转换为另一个本地时间的情况下非常有用。
以服务器应用程序为例,它在客户端应用程序中显示服务器的当前时间。如果未在服务器上指定 DateTimeKind.Unspecified,并且通过 WCF 调用检索当前时间,则当 .ToString 在客户端应用程序中调用,如果它们不同,它将自动转换为本地时区。
评论