العمل مع التواريخ والوقت في Rust: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع التواريخ والوقت في Rust: من الألف إلى الياء

\n\n

العمل مع التواريخ والوقت هو أحد المهام الأساسية في تطوير أي تطبيق: من خدمات الويب إلى أنظمة التسجيل. في Rust، المعروفة بسلامتها وأدائها، يتم تنفيذ العمل مع التواريخ من خلال مكتبة قوية chrono. في هذه المقالة، سنشرح جميع جوانب العمل مع التواريخ والوقت: من العمليات الأساسية إلى المعالجات المعقدة مع المناطق الزمنية.

\n\n

1. تثبيت وإعداد مكتبة chrono

\n\n

تعتبر مكتبة chrono المعيار الفعلي للعمل مع التواريخ والوقت في Rust. توفر مجموعة كاملة من الأدوات: من كائنات التاريخ البسيطة إلى الأنواع المعقدة مع مراعاة المناطق الزمنية.

\n\n

لبدء العمل، أضف التبعية إلى ملف Cargo.toml:

\n\n
[dependencies]\nchrono = "0.4"
\n\n

بعد ذلك، قم باستيراد الوحدات الضرورية إلى الكود الخاص بك:

\n\n
use chrono::{NaiveDate, NaiveDateTime, DateTime, Utc, Local, Duration};\nuse chrono::format::ParseError;
\n\n

2. أنواع البيانات الأساسية للعمل مع التواريخ

\n\n

في chrono، هناك عدة أنواع رئيسية تغطي جميع احتياجات المطور:

\n\n
    \n
  • NaiveDate — تاريخ بدون وقت ومنطقة زمنية (مثال: 2024-01-15).
  • \n
  • NaiveTime — وقت بدون تاريخ ومنطقة زمنية (مثال: 14:30:00).
  • \n
  • NaiveDateTime — مزيج من التاريخ والوقت بدون منطقة زمنية.
  • \n
  • DateTime<Tz> — تاريخ ووقت مع تحديد المنطقة الزمنية (مثال: DateTime<Utc> أو DateTime<Local>).
  • \n
\n\n

لنلقِ نظرة على مثال لإنشاء كائنات من كل نوع:

\n\n
// إنشاء NaiveDate\nlet date = NaiveDate::from_ymd_opt(2024, 1, 15).unwrap();\nprintln!("التاريخ: {}", date); // 2024-01-15\n\n// إنشاء NaiveTime\nlet time = NaiveTime::from_hms_opt(14, 30, 0).unwrap();\nprintln!("الوقت: {}", time); // 14:30:00\n\n// إنشاء NaiveDateTime\nlet datetime = NaiveDateTime::new(date, time);\nprintln!("التاريخ والوقت: {}", datetime); // 2024-01-15 14:30:00\n\n// إنشاء DateTime مع المنطقة الزمنية UTC\nlet utc_datetime = Utc::now();\nprintln!("الوقت الحالي UTC: {}", utc_datetime);\n\n// إنشاء DateTime مع المنطقة الزمنية المحلية\nlet local_datetime = Local::now();\nprintln!("الوقت المحلي الحالي: {}", local_datetime);
\n\n

3. تنسيق وتحليل التواريخ

\n\n

من أكثر المهام شيوعًا تحويل التواريخ إلى نصوص والعكس. تستخدم chrono سلاسل تنسيق مشابهة لـ strftime من لغة C.

\n\n

تنسيق التاريخ إلى نص

\n\n

للتنسيق، استخدم الطريقة .format():

\n\n
use chrono::Utc;\n\nlet now = Utc::now();\n\n// تنسيق ISO 8601 القياسي\nprintln!("ISO 8601: {}", now.format("%Y-%m-%dT%H:%M:%S%z"));\n\n// تنسيق باللغة العربية\nprintln!("التنسيق العربي: {}", now.format("%d.%m.%Y %H:%M"));\n\n// التاريخ فقط\nprintln!("التاريخ فقط: {}", now.format("%A, %d %B %Y"));\n\n// الإخراج:\n// ISO 8601: 2024-01-15T14:30:00+0000\n// التنسيق العربي: 15.01.2024 14:30\n// التاريخ فقط: Monday, 15 January 2024
\n\n

محددات التنسيق الرئيسية:

\n\n
    \n
  • %Y — السنة (4 أرقام)
  • \n
  • %m — الشهر (01-12)
  • \n
  • %d — اليوم (01-31)
  • \n
  • %H — الساعات (00-23)
  • \n
  • %M — الدقائق (00-59)
  • \n
  • %S — الثواني (00-59)
  • \n
  • %z — إزاحة المنطقة الزمنية
  • \n
  • %A — الاسم الكامل ليوم الأسبوع
  • \n
  • %B — الاسم الكامل للشهر
  • \n
\n\n

تحليل نص إلى تاريخ

\n\n

لتحويل نص إلى تاريخ، استخدم الطريقة parse_from_str():

\n\n
use chrono::NaiveDate;\nuse chrono::format::ParseError;\n\nfn parse_date(dat                

المدونات

توصيات الكتب