我们知道DateTime.Now能获得系统的当前时间,DateTime是个结构,Now则是其一个只读的静态变量,那么这个数据是怎么以及什么时候给赋予的啊,是和底层时钟有关系吗,然而它是只读的啊,底层是怎么给其赋值的啊,是不是底层的代码不受只读属性的约束,然后系统时钟变更时同步更新DateTime.Now的值了
屬性有get 和set 方法
只讀的屬性就是只有get 方法
DateTime.Now 這個寫法就是在呼叫Now 的get 方法
get 被呼叫的時候決定回傳的值
DateTime.Now只有个get,我之前搞错了,误以为在类的内部可以给静态的只读属性赋值,然而静态属性好像只能在静态构造函数中赋值
DateTime.Now的值明显是在不停的变化的,所以我是想知道DateTime.Now是怎么给赋值的
我反编译mscorlib.dll里面DateTime.Now是这样的
public static DateTime Now
{
get
{
}
}
正常的get都有个return,这个里面啥都没有,不知道微软底层是怎么实现的
@WmW:
反組譯是看不到的喔
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);
}
}
參考:
https://referencesource.microsoft.com/#mscorlib/system/datetime.cs
@RosonJ: 明白了,谢谢
应该是调用的系统时间
[__DynamicallyInvokable]
public static DateTime Now
{
[__DynamicallyInvokable]
get
{
DateTime utcNow = UtcNow;
bool isAmbiguousLocalDst = false;
// 获取当前时间
long ticks = TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(utcNow, out isAmbiguousLocalDst).Ticks;
long num = utcNow.Ticks + ticks;
if (num > 3155378975999999999L)
{
return new DateTime(3155378975999999999L, DateTimeKind.Local);
}
if (num < 0)
{
return new DateTime(0L, DateTimeKind.Local);
}
return new DateTime(num, DateTimeKind.Local, isAmbiguousLocalDst);
}
}
原来如此,谢谢