首页 新闻 搜索 专区 学院

C#的DateTime.Now的值是如何赋值的

0
悬赏园豆:20 [已解决问题] 解决于 2020-07-10 12:12

我们知道DateTime.Now能获得系统的当前时间,DateTime是个结构,Now则是其一个只读的静态变量,那么这个数据是怎么以及什么时候给赋予的啊,是和底层时钟有关系吗,然而它是只读的啊,底层是怎么给其赋值的啊,是不是底层的代码不受只读属性的约束,然后系统时钟变更时同步更新DateTime.Now的值了

WmW的主页 WmW | 初学一级 | 园豆:118
提问于:2020-07-09 19:44
< >
分享
最佳答案
0

屬性有get 和set 方法
只讀的屬性就是只有get 方法
DateTime.Now 這個寫法就是在呼叫Now 的get 方法
get 被呼叫的時候決定回傳的值

收获园豆:10
RosonJ | 老鸟四级 |园豆:3740 | 2020-07-09 20:13

DateTime.Now只有个get,我之前搞错了,误以为在类的内部可以给静态的只读属性赋值,然而静态属性好像只能在静态构造函数中赋值
DateTime.Now的值明显是在不停的变化的,所以我是想知道DateTime.Now是怎么给赋值的
我反编译mscorlib.dll里面DateTime.Now是这样的
public static DateTime Now
{
get
{
}
}
正常的get都有个return,这个里面啥都没有,不知道微软底层是怎么实现的

WmW | 园豆:118 (初学一级) | 2020-07-10 09:12

@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 | 园豆:3740 (老鸟四级) | 2020-07-10 09:41

@RosonJ: 明白了,谢谢

WmW | 园豆:118 (初学一级) | 2020-07-10 12:09
其他回答(3)
0
顾晓北 | 园豆:10055 (专家六级) | 2020-07-09 19:48
0

应该是调用的系统时间

会长 | 园豆:8990 (大侠五级) | 2020-07-10 09:20
0

[__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);
}
}

收获园豆:10
Tom.汤 | 园豆:2002 (老鸟四级) | 2020-07-10 10:02

原来如此,谢谢

支持(0) 反对(0) WmW | 园豆:118 (初学一级) | 2020-07-10 12:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册