c#定时器与系统时钟同步

c#定时器与系统时钟同步,c#,C#,我有一个计时器,每30分钟调用一次加载到数据库的方法。但是如何使它每30分钟调用一次方法,并与系统时间同步?例如:12:35,然后是13:05,13:35,14:05等等 static void Main(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 1800000; timer.Elapsed += load

我有一个计时器,每30分钟调用一次加载到数据库的方法。但是如何使它每30分钟调用一次方法,并与系统时间同步?例如:12:35,然后是13:05,13:35,14:05等等

static void Main(string[] args)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = 1800000;
        timer.Elapsed += load_to_DB;
        timer.Start();
        Console.ReadLine();
    }

    // This method is called every 30 mins
    static void load_to_DB(object sender, System.Timers.ElapsedEventArgs e)
    {
        //method
    }

显然,您正在使用的计时器是一个间隔计时器,它将从调用start开始重复每个间隔


实施计划的一种方法是计算出现在和下次计划时间之间的差异(例如,在12:02时,您希望将间隔设置为3分钟,但在12:05时,您希望将间隔设置为30分钟等)。

如果需要手动设置开始日期和时间,请尝试以下操作:


私有静态日期时间_NextCallTime;
私有静态int MinSteps=30;
静态void Main(字符串[]参数)
{
//您可以手动设置开始日期和时间
_NextCallTime=DateTime.Parse(“2020/5/12 12:35”);
System.Timers.Timer Timer=新的System.Timers.Timer()
{Interval=31000,Enabled=true};
timer.appeated+=计时器处理程序;
Console.ReadLine();
}
//该计时器每31秒检查一次
静态无效计时器\u处理程序(对象发送器,System.Timers.ElapsedEventArgs e)
{
如果(DateTime.Now.Date==\u NextCallTime.Date
&&DateTime.Now.Hour==\u NextCallTime.Hour
&&DateTime.Now.Minute==\u NextCallTime.Minute)
{
_NextCallTime=\u NextCallTime.AddMinutes(分步);
将_加载到_DB();
}
}
//此方法在特定时段(12:35-1:5…)每30分钟调用一次
静态空荷载_至_DB()
{
//方法
}
此外,如果您只需要设置开始时间,而不需要设置日期:

//您可以手动设置开始时间
_NextCallTime=DateTime.Parse($“{DateTime.Now.ToString(“yyyy/MM/dd”,System.Globalization.CultureInfo.InvariantCulture)}12:35”);

如果它每30分钟发射一次,它已经同步到实际时间的30分钟标记。你是在问如何让它在:05和:35触发,而不是基于它第一次创建的时间?如果它已经与系统时间同步,那么是的。我想在5点和35点触发。