You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储程序启动时的日期时间,避免Console.ReadLine刷新相关变量?

问题:如何存储程序启动时的时间而非当前时间?

我编写了多个涉及日期/时间的程序(包括使用Random.Next()),但一直存在一个问题:每次调用Console.ReadLine()(或其他会使代码暂停后恢复的语句)时,所有基于日期时间设置或修改的变量都会被刷新。请问是否可以存储程序启动时的时间而非当前时间?我使用的是在线编辑器dotnetfiddle.net。

示例代码:

using System;

namespace timeTest
{
    public class Program
    {
        public static void Main()
        {
            Random random = new Random();//Random is based off of time, which updates
            Console.WriteLine("Randomizer: " + random.Next(1,11));//Prints random number
            
            long time = DateTime.Now.Ticks;
            Console.WriteLine("Time in ticks: "+time);//Prints time in ticks
            
            int hr = DateTime.Now.Hour;
            int min = DateTime.Now.Minute;
            int sec = DateTime.Now.Second;
            Console.WriteLine("Military time: "+hr+":"+min+":"+sec);//Prints time on the clock
            
            int sec2 = sec*2;//Stores value in a different variable times two
            Console.WriteLine("2x the current second: "+sec2);//Prints twice the second
            
            while (true) {Console.ReadLine();}//Every time Console.ReadLine is called, it changes again
        }
    }
}

解决方案

1. 固定存储程序启动时间

在程序启动的最早期,将当前时间存入一个静态只读变量,后续所有需要使用时间的逻辑都基于这个变量,不再重复调用DateTime.Now。

2. 复用Random实例

Random默认以当前时间为种子,短时间内重复创建实例会导致随机序列重复。因此只需在程序启动时创建一次Random实例,后续复用即可。

修改后的代码:

using System;

namespace timeTest
{
    public class Program
    {
        // 存储程序启动时的时间,仅初始化一次
        private static readonly DateTime _startTime = DateTime.Now;
        // 全局复用的Random实例,仅初始化一次
        private static readonly Random _random = new Random();

        public static void Main()
        {
            Console.WriteLine("Randomizer: " + _random.Next(1,11));
            
            long time = _startTime.Ticks;
            Console.WriteLine("Time in ticks: " + time);
            
            int hr = _startTime.Hour;
            int min = _startTime.Minute;
            int sec = _startTime.Second;
            Console.WriteLine("Military time: " + hr + ":" + min + ":" + sec);
            
            int sec2 = sec*2;
            Console.WriteLine("2x the current second: " + sec2);
            
            while (true) { Console.ReadLine(); } // 暂停恢复后,变量值不会再变化
        }
    }
}

关键修改说明

  • _startTime作为类级静态变量,在程序加载时就完成初始化,后续始终保持程序启动时的时间值,不会随系统时间更新。
  • _random同样作为静态变量仅初始化一次,避免了因重复创建实例导致的随机数重复问题。

内容的提问来源于stack exchange,提问作者Razzon22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:15:44