答案 0 :(得分:24)
实际上它是另一种方式。 Now
属性实现为:
public static DateTime Now {
get {
return UtcNow.ToLocalTime();
}
}
答案 1 :(得分:3)
Documentation for UtcNow中有一个很长的例子,它表明它们是相同的。
答案 2 :(得分:2)
嗯,实际的实现是(你可以在referencesource上看到):
public static DateTime Now {
get {
Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Local);
DateTime utc = UtcNow;
Boolean isAmbiguousLocalDst = false;
Int64 offset = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utc, out isAmbiguousLocalDst).Ticks;
long tick = utc.Ticks + offset;
if (tick>DateTime.MaxTicks) {
return new DateTime(DateTime.MaxTicks, DateTimeKind.Local);
}
if (tick<DateTime.MinTicks) {
return new DateTime(DateTime.MinTicks, DateTimeKind.Local);
}
return new DateTime(tick, DateTimeKind.Local, isAmbiguousLocalDst);
}
}
ToUniversalTime()
来电TimeZoneInfo.ConvertTimeToUtc(this, TimeZoneInfoOptions.NoThrowOnInvalidTime)
而UtcNow只是:
long ticks = 0;
ticks = GetSystemTimeAsFileTime();
return new DateTime( ((UInt64)(ticks + FileTimeOffset)) | KindUtc);
答案 3 :(得分:0)
我认为使用DateTime.UTCNow会将DateTime.Kind属性的值视为UTC,而使用ToUniversalTime,您可以为Kind属性提供本地日期时间对象。
答案 4 :(得分:0)
它不是快捷方式,DateTime.Now在内部使用DateTime.UtcNow然后应用本地化。简而言之,如果您已经拥有DateTime.Now并需要将其转换为UTC,请使用ToUniversalTime(),如果您只想以UTC格式检索当前时间,请使用DateTime.UtcNow。