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,Kind =未指定
ToLocalTime: 5/6/2005 07:34:42 AM,Kind =本地
ToUniversalTime: 5/6/2005 09:34:42 PM,Kind =协调世界时
所以,我的问题是,如果未指定的是Utc,那么为什么Utc到Utc的转换会更改datetime对象的值?
发布于 2013-05-08 21:53:23
不,Unspecified和UTC有很大的不同--你引用的页面来自ToLocalTime
。关键是,如果您使用“未指定的”DateTime
调用ToLocalTime
,则该值将被视为使用UTC格式。
同样,如果您使用“未指定的”DateTime
调用ToUniversalTime
,则该值将被视为处于系统本地时区。
坦率地说,这就是为什么I dislike DateTime
rather a lot。如果我是您,我会使用Noda Time,它将概念完全分离为不同的类型,消除了许多混乱。(有更多的类型需要了解,但每种类型都代表一个概念。)我显然是有偏见的。
发布于 2015-10-24 01:10:06
在不希望将时间转换为另一个本地时间的情况下,DateTimeKind.Unspecified非常有用。
例如,服务器应用程序在客户端应用程序中显示服务器的当前时间。如果未在服务器上指定DateTimeKind.Unspecified,并且当前时间是通过WCF调用检索的,则在客户端应用程序中调用.ToString时,如果它们不同,则会自动将其转换为本地时区。
https://stackoverflow.com/questions/16442484
复制相似问题