TGViewer
DotNet | دات نت DotNet | دات نت @dotnetcode · 1.22K subscribers
Post #3097 1.26K
🔥 نکته حیاتی در Hangfire: جنگ با ساعت و تایم‌زون‌ها! ⏰🌍

اگر تا حالا براتون پیش اومده که جابی رو برای ساعت ۸ صبح تنظیم کردید ولی ساعت ۱۱:۳۰ اجرا شده، این پست برای شماست!

⚠️ ماجرا چیه؟
هنگ‌فایر (Hangfire) به صورت پیش‌فرض (Default) همه جاب‌های تکرارشونده (Recurring Jobs) رو بر مبنای ساعت UTC اجرا می‌کنه. یعنی اگر تنظیمات تایم‌زون رو بهش ندید، باید اختلاف ساعت ایران با گرینویچ رو دستی حساب کنید که اصلا جالب نیست.

حالا اگر بخوایم بگیم "به وقت ایران اجرا شو"، با یه چالش جدید روبرو می‌شیم:

🔸 ویندوز می‌گه: "Iran Standard Time"

🔸 لینوکس/داکر می‌گه: "Asia/Tehran"
اگر این تفاوت هندل نشه، روی سرور لینوکسی یا کانتینر داکر به خطای TimeZoneNotFoundException می‌خورید! 🤯

✅ راه حل نهایی (Cross-Platform):
با این تیکه کد، هم مشکل UTC رو حل کنید و هم کدی بنویسید که روی ویندوز، لینوکس و مک بدون تغییر کار کنه:
using System.Runtime.InteropServices;

// 1. تشخیص خودکار شناسه تایم‌زون بر اساس سیستم‌عامل
// Windows -> "Iran Standard Time"
// Linux/Docker -> "Asia/Tehran"
var tehranId = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
? "Iran Standard Time"
: "Asia/Tehran";

// 2. تنظیم ساعت به وقت ایران
RecurringJob.AddOrUpdate(
type.FullName,
() => job.ExecuteAsync(),
attribute.CronExpression,
new RecurringJobOptions
{
// خداحافظ UTC، سلام تهران! 👋
TimeZone = TimeZoneInfo.FindSystemTimeZoneById(tehranId)
}
);

💡 با این روش، دیگه نگران جلو/عقب کشیدن ساعت‌ها یا تفاوت محیط لوکال و سرور نباشید.

🔗 بحث مرتبط در کامیونیتی هنگ‌فایر:
https://discuss.hangfire.io/t/need-local-time-instead-of-utc/279/7


🎺برای یادگیری بیشتر و دریافت مطالب مفید در زمینه .NET و برنامه‌نویسی، به کانال ما بپیوندید!

📚💻 @dotnetcode 🖥

#CSharp #DotNet #Hangfire #Docker #Backend #TimeZone #Tips
Hangfire Discussion Need local time instead of UTC I need to schedule recurring jobs based on local time, for example 02:00 CET (which is UTC+1 normally and UTC+2 during daylight savings time aka “summer time”). I know this introduces some problems when switching to/from summer to winter time (there is an…
  • ❤ 12
  • 👍 7
  • 🔥 3
More from @dotnetcode
  1. Sep 16, 2026ورک‌شاپ «AI Agents in C# (MAF)» در این ورک‌شاپ به بررسی امکانات جدید برنامه‌نویسی با کتابخ…
  2. Jul 10, 2026#مهندس_فکر_کن قسمت:4️⃣ 🎯مصاحبه‌کننده: ءCache Stampede چیست؟ فرض کن یک کلید در Cache داری:…
  3. Jun 12, 20261. Indexes منابع پیشنهادی این چالش که برای من اینها جذاب بوده و هست. A. Designing Data-Int…
  4. Jun 9, 2026آینده هوش مصنوعی و مهندسی کامپیوتر هوش مصنوعی مهندسی را نابود نمی‌کند، اما در سکوت در حال…
  5. Jun 4, 2026تحولی بزرگ در دنیای سی‌شارپ: ویژگی هیجان‌انگیز Union Types در C# 15! بالاخره یکی از جذاب‌ت…
  6. Feb 8, 2026👩‍💻 پستگرس رو ۲.۵ برابر سریع‌تر کن! تصور کن مغز متفکر دیتابیست (Parser) رو بدی دست هوش م…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →