On msdn it is defined for Unspecified Kind as:
因此,如果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();
}
}
}
将输出显示为:
未指定:..... 5/6/2005 02:34:42 PM,种类=未指定
ToLocalTime:5/6/2005 07:34:42 AM,Kind = Local
ToUniversalTime:5/6/2005 09:34:42 PM,Kind = Utc
所以,我遇到的问题是,如果Unspecified是Utc那么为什么Utc到Utc转换会改变datetime对象值?
答案 0 :(得分:51)
不,未指定且UTC非常不同 - 您引用的网页来自ToLocalTime
。关键是,如果您使用“未指定的”ToLocalTime
来呼叫DateTime
,那么该值将被视为,就像它是UTC一样。
同样,如果您使用“未指定”ToUniversalTime
来致电DateTime
,则该值将被视为,就好像它位于系统本地时区。
坦率地说,这就是为什么I dislike DateTime
rather a lot。如果我是你,我会使用Noda Time代替,它将概念完全分成不同的类型,消除了很多混乱。 (有更多类型需要了解,但每一种都代表一个概念。)我显然有偏见......
答案 1 :(得分:7)
如果您不希望将时间转换为其他本地时间,则DateTimeKind.Unspecified非常有用。
以服务器应用程序为例,该应用程序在客户端应用程序中显示服务器的当前时间。如果未在服务器上指定DateTimeKind.Unspecified并且通过WCF调用检索当前时间,则在客户端应用程序中调用.ToString时,如果它们不同,它将自动转换为本地时区。