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

C#每日检测指定时间触发缓存数据发送的实现问题

解决方案

方案1:按你指定的UTC时间判断

既然你明确东部时间下午4点对应UTC时间8点,直接判断当前UTC时间的时间点即可。考虑到代码不会刚好卡在整秒执行,建议放宽到1分钟内的误差:

var timeNowUtc = DateTime.UtcNow;
// 匹配UTC时间8:00:00至8:00:59的时间段
if (timeNowUtc.Hour == 8 && timeNowUtc.Minute == 0)
{
    // 执行发送缓存内容的方法
    await SendCachedItemsAsync();
}

方案2:严格基于美国东部时间判断(含夏令时)

如果需要自动适配夏令时切换(美国东部时间分EST和EDT),用TimeZoneInfo做时区转换更准确:

// 获取美国东部时区(Windows系统用这个ID)
var easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
// 跨平台应用(Linux/macOS)请改用这个ID:
// var easternTimeZone = TimeZoneInfo.FindSystemTimeZoneById("America/New_York");

// 将UTC时间转换为东部时间
var timeNowEastern = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, easternTimeZone);

// 匹配东部时间16:00:00至16:00:59的时间段
if (timeNowEastern.Hour == 16 && timeNowEastern.Minute == 0)
{
    // 执行发送缓存内容的方法
    await SendCachedItemsAsync();
}

额外提示

  • 仅靠if语句轮询的话,必须保证代码持续运行(比如放在后台服务的循环里),否则很容易错过触发时机。更可靠的方式是用定时任务框架,比如Hangfire、Quartz.NET,直接配置每日UTC8点(或东部时间16点)执行任务。
  • 你设置的缓存24小时绝对过期,刚好和每日触发的频率匹配,能确保每次触发时拿到的是最新的缓存内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:56