首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#定时器与系统时钟同步

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

Stack Overflow用户
提问于 2020-07-09 08:51:11
回答 2查看 684关注 0票数 0

我有一个计时器,它每30分钟调用一次load_to_DB方法。但如何使其与系统时间同步,每30分钟调用一次该方法?例如: 12:35,然后13:05,13:35,14:05等等。

代码语言:javascript
复制
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
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-09 09:07:10

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

代码语言:javascript
复制
private static DateTime _NextCallTime;
private static int MinSteps = 30;

static void Main(string[] args)
{
    // you can manually set start Date and Time
    _NextCallTime = DateTime.Parse ("2020/5/12 12:35");
    System.Timers.Timer timer = new System.Timers.Timer() 
            {Interval= 31000, Enabled = true}; 
    timer.Elapsed += timer_Handler;
    Console.ReadLine();
}

// this timer checks every 31 seconds
static void timer_Handler(object sender, System.Timers.ElapsedEventArgs e)
{
    if (DateTime.Now.Date == _NextCallTime.Date
       && DateTime.Now.Hour == _NextCallTime.Hour
       && DateTime.Now.Minute == _NextCallTime.Minute)
    {
        _NextCallTime = _NextCallTime.AddMinutes(MinSteps);         
        load_to_DB();
    }
    
}

// This method is called every 30 mins at spesific periods (12:35 - 1:5 ...)
static void load_to_DB()
{
    //method
}

另外,如果您只需要设置开始时间,而不是日期:

代码语言:javascript
复制
// you can manually set start Time
_NextCallTime = DateTime.Parse($"{DateTime.Now.ToString("yyyy/MM/dd",System.Globalization.CultureInfo.InvariantCulture)} 12:35");
票数 1
EN

Stack Overflow用户

发布于 2020-07-09 08:57:16

显然,您使用的计时器是一个间隔计时器,每次调用开始时都会重复每个时间间隔。

实现您的计划的一种方法是从现在到下一次您想要计划的时间(例如在12:02,您希望将间隔设置为3分钟,但在12:05您希望将间隔设置为30分钟等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62811020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档