Dates

وحدة Dates توفر نوعين للعمل مع التواريخ: Date و DateTime، والتي تمثل دقة اليوم والمللي ثانية، على التوالي؛ وكلاهما نوعان فرعيان من النوع المجرد TimeType. الدافع وراء وجود أنواع متميزة بسيط: بعض العمليات تكون أبسط بكثير، سواء من حيث الكود أو التفكير العقلي، عندما لا يتعين التعامل مع تعقيدات الدقة الأكبر. على سبيل المثال، نظرًا لأن نوع 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 يحل فقط إلى دقة تاريخ واحد (أي لا ساعات، دقائق، أو ثواني)، فإن الاعتبارات العادية للمناطق الزمنية، وتوفير ضوء النهار/الوقت الصيفي، والثواني الكبيسة غير ضرورية ويتم تجنبها.

كلا من Date و DateTime هما في الأساس أغلفة غير قابلة للتغيير Int64. الحقل الفردي instant من أي نوع هو في الواقع نوع UTInstant{P}، والذي يمثل خط زمن آلي متزايد باستمرار بناءً على الثانية UT [1]. نوع 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 غير مدرك لمناطق الزمن (naive، في مصطلحات بايثون)، وهو مشابه لـ LocalDateTime في Java 8. يمكن إضافة وظائف منطقة زمنية إضافية من خلال TimeZones.jl package، والذي يجمع IANA time zone database. كلا من 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 و 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 مبنيان على معيار ISO 8601، الذي يتبع التقويم الغريغوري الاستباقي. ملاحظة واحدة هي أن معيار ISO 8601 دقيق بشأن تواريخ BC/BCE. بشكل عام، كان آخر يوم من عصر BC/BCE، 1-12-31 BC/BCE، متبوعًا بـ 1-1-1 AD/CE، وبالتالي لا يوجد عام صفر. ومع ذلك، ينص المعيار ISO على أن 1 BC/BCE هو العام صفر، لذا فإن 0000-12-31 هو اليوم الذي يسبق 0001-01-01، والعام -0001 (نعم، سالب واحد للسنة) هو 2 BC/BCE، والعام -0002 هو 3 BC/BCE، وهكذا.

Constructors

Date و DateTime يمكن إنشاؤها بواسطة أنواع صحيحة أو Period، من خلال التحليل، أو من خلال المعدلات (المزيد عن ذلك لاحقًا):

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

Date أو DateTime يتم تحقيق التحليل من خلال استخدام سلاسل التنسيق. تعمل سلاسل التنسيق على مفهوم تعريف فتحات محددة أو ثابتة العرض تحتوي على نقطة للتحليل وتمرير النص للتحليل وسلسلة التنسيق إلى 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 أو 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 المُنشئ، بالشكل Date("2015-01-01",dateformat"y-m-d") أو DateTime("20150101",dateformat"yyyymmdd").

تُحدد الفتحات المفصولة عن طريق تحديد الفاصل الذي يجب أن يتوقعه المحلل بين فترتين متتاليتين؛ لذا فإن "y-m-d" يُعلم المحلل أنه بين الفتحتين الأولى والثانية في سلسلة التاريخ مثل "2014-07-16"، يجب أن يجد حرف -. تُعلم الأحرف y و m و d المحلل بأي فترات يجب تحليلها في كل فتحة.

كما هو الحال مع المنشئين أعلاه مثل Date(2013)، فإن DateFormat المحددة تسمح بوجود أجزاء مفقودة من التواريخ والأوقات طالما أن الأجزاء السابقة متاحة. يتم إعطاء الأجزاء الأخرى القيم الافتراضية المعتادة. على سبيل المثال، Date("1981-03", dateformat"y-m-d") تعيد 1981-03-01، بينما Date("31/12", dateformat"d/m/y") تعطي 0001-12-31. (لاحظ أن السنة الافتراضية هي 1 ميلادي/ميلادي). ومع ذلك، فإن سلسلة فارغة دائمًا ما ترمي ArgumentError.

تحدد الفتحات ذات العرض الثابت عن طريق تكرار حرف النقطة بعدد المرات التي تتوافق مع العرض دون فاصل بين الأحرف. لذا فإن dateformat"yyyymmdd" ستتوافق مع سلسلة تاريخ مثل "20140716". يميز المحلل الفتحة ذات العرض الثابت من خلال غياب الفاصل، مشيرًا إلى الانتقال "yyyymm" من حرف نقطة واحد إلى التالي.

يدعم تحليل النصوص للأشهر من خلال استخدام الحرفين u و U، للأسماء المختصرة والطويلة للأشهر، على التوالي. بشكل افتراضي، يتم دعم أسماء الأشهر باللغة الإنجليزية فقط، لذا فإن u يتوافق مع "Jan" و "Feb" و "Mar" وما إلى ذلك. و U يتوافق مع "January" و "February" و "March" وما إلى ذلك. مشابهًا لوظائف الربط بين الاسم=>القيمة الأخرى dayname و monthname، يمكن تحميل محليات مخصصة عن طريق تمرير الربط locale=>Dict{String,Int} إلى القواميس MONTHTOVALUEABBR و MONTHTOVALUE لأسماء الأشهر المختصرة والطويلة، على التوالي.

تستخدم الأمثلة أعلاه ماكرو dateformat"". يقوم هذا الماكرو بإنشاء كائن DateFormat مرة واحدة عند توسيع الماكرو ويستخدم نفس كائن DateFormat حتى إذا تم تشغيل جزء من الكود عدة مرات.

julia> for i = 1:10^5
           Date("2015-01-01", dateformat"y-m-d")
       end

أو يمكنك إنشاء كائن DateFormat بشكل صريح:

julia> df = DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02

بدلاً من ذلك، استخدم البث:

julia> years = ["2015", "2016"];

julia> Date.(years, DateFormat("yyyy"))
2-element Vector{Date}:
 2015-01-01
 2016-01-01

لراحتك، يمكنك تمرير سلسلة التنسيق مباشرة (على سبيل المثال، Date("2015-01-01","y-m-d"))، على الرغم من أن هذا الشكل يتسبب في تكاليف أداء إذا كنت تقوم بتحليل نفس التنسيق بشكل متكرر، حيث يقوم داخليًا بإنشاء كائن DateFormat جديد في كل مرة.

بالإضافة إلى ذلك عبر المنشئين، يمكن إنشاء Date أو DateTime من السلاسل النصية باستخدام الدوال parse و tryparse، ولكن مع وسيط ثالث اختياري من نوع DateFormat يحدد التنسيق؛ على سبيل المثال، parse(Date, "06.23.2013", dateformat"m.d.y")، أو tryparse(DateTime, "1999-12-31T23:59:59") الذي يستخدم التنسيق الافتراضي. الفرق الملحوظ بين الدالتين هو أنه مع 4d61726b646f776e2e436f64652822222c202274727970617273652229_40726566، لا يتم إلقاء خطأ إذا كانت السلسلة فارغة أو بتنسيق غير صالح؛ بدلاً من ذلك يتم إرجاع nothing.

Julia 1.9

قبل Julia 1.9، كانت السلاسل الفارغة يمكن تمريرها إلى المنشئات و parse دون خطأ، مما يعيد كائنات DateTime(1) أو Date(1) أو Time(0) حسب الاقتضاء. وبالمثل، لم يكن tryparse يعيد nothing.

مجموعة كاملة من اختبارات التحليل والتنسيق والأمثلة متاحة في stdlib/Dates/test/io.jl.

Durations/Comparisons

Finding the length of time between two Date or DateTime is straightforward given their underlying representation as UTInstant{Day} and UTInstant{Millisecond}, respectively. The difference between Date is returned in the number of Day, and DateTime in the number of Millisecond. Similarly, comparing TimeType is a simple matter of comparing the underlying machine instants (which in turn compares the internal Int64 values).

julia> dt = Date(2012,2,29)
2012-02-29

julia> dt2 = Date(2000,2,1)
2000-02-01

julia> dump(dt)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 734562

julia> dump(dt2)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 730151

julia> dt > dt2
true

julia> dt != dt2
true

julia> dt + dt2
ERROR: MethodError: no method matching +(::Date, ::Date)
[...]

julia> dt * dt2
ERROR: MethodError: no method matching *(::Date, ::Date)
[...]

julia> dt / dt2
ERROR: MethodError: no method matching /(::Date, ::Date)

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

julia> dt = DateTime(2012,2,29)
2012-02-29T00:00:00

julia> dt2 = DateTime(2000,2,1)
2000-02-01T00:00:00

julia> dt - dt2
381110400000 milliseconds

Accessor Functions

لأن الأنواع Date و DateTime مخزنة كقيم مفردة Int64، يمكن استرجاع أجزاء أو حقول التاريخ من خلال دوال الوصول. تعيد دوال الوصول بحروف صغيرة الحقل كعدد صحيح:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

بينما تعيد propercase نفس القيمة في النوع المقابل Period:

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

تُقدَّم الطرق المركبة لأنها أكثر كفاءة في الوصول إلى حقول متعددة في نفس الوقت بدلاً من الوصول إليها بشكل فردي:

julia> Dates.yearmonth(t)
(2014, 1)

julia> Dates.monthday(t)
(1, 31)

julia> Dates.yearmonthday(t)
(2014, 1, 31)

يمكن أيضًا الوصول إلى القيمة الأساسية UTInstant أو القيمة الصحيحة:

julia> dump(t)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 735264

julia> t.instant
Dates.UTInstant{Day}(Day(735264))

julia> Dates.value(t)
735264

Query Functions

توفر دوال الاستعلام معلومات تقويمية حول TimeType. تشمل المعلومات عن يوم الأسبوع:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

julia> Dates.dayofweekofmonth(t) # 5th Friday of January
5

شهر السنة:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

بالإضافة إلى المعلومات حول TimeType وسنته وربع السنة:

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

تستطيع الطرق dayname و monthname أيضًا أخذ كلمة مفتاحية اختيارية locale يمكن استخدامها لإرجاع اسم اليوم أو الشهر من السنة للغات/المواقع الأخرى. هناك أيضًا إصدارات من هذه الدوال التي تعيد الأسماء المختصرة، وهي dayabbr و monthabbr. أولاً، يتم تحميل التعيين في المتغير LOCALES:

julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
                        "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

julia> french_months_abbrev = ["janv","févr","mars","avril","mai","juin",
                              "juil","août","sept","oct","nov","déc"];

julia> french_days = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"];

julia> Dates.LOCALES["french"] = Dates.DateLocale(french_months, french_months_abbrev, french_days, [""]);

يمكن بعد ذلك استخدام الوظائف المذكورة أعلاه لتنفيذ الاستعلامات:

julia> Dates.dayname(t;locale="french")
"vendredi"

julia> Dates.monthname(t;locale="french")
"janvier"

julia> Dates.monthabbr(t;locale="french")
"janv"

نظرًا لعدم تحميل النسخ المختصرة من الأيام، فإن محاولة استخدام الدالة dayabbr ستؤدي إلى حدوث خطأ.

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Vector{String} at index [5]
Stacktrace:
[...]

TimeType-Period Arithmetic

من الجيد أن تكون على دراية بكيفية التعامل مع حسابات فترات التاريخ عند استخدام أي إطار عمل للغة/التاريخ، حيث يوجد بعض tricky issues للتعامل معها (على الرغم من أن هذا أقل بكثير بالنسبة لأنواع الدقة اليومية).

تسعى مقاربة وحدة Dates إلى اتباع المبدأ البسيط المتمثل في محاولة تغيير أقل ما يمكن عند إجراء العمليات الحسابية Period. تُعرف هذه المقاربة أيضًا غالبًا باسم الحسابات التقويمية أو ما قد تخمنه إذا سُئلت عن نفس الحساب في محادثة. لماذا كل هذه الضجة حول هذا؟ دعنا نأخذ مثالًا كلاسيكيًا: أضف شهرًا واحدًا إلى 31 يناير 2014. ما هي الإجابة؟ ستقول جافا سكريبت March 3 (تفترض 31 يومًا). تقول PHP March 2 (تفترض 30 يومًا). الحقيقة هي أنه لا توجد إجابة صحيحة. في وحدة Dates، تعطي النتيجة 28 فبراير. كيف تكتشف ذلك؟ اعتبر لعبة القمار الكلاسيكية 7-7-7 في الكازينوهات.

الآن تخيل فقط أنه بدلاً من 7-7-7، فإن الفتحات هي السنة-الشهر-اليوم، أو في مثالنا، 2014-01-31. عندما تطلب إضافة شهر واحد إلى هذا التاريخ، يتم زيادة خانة الشهر، لذا لدينا الآن 2014-02-31. ثم يتم التحقق من رقم اليوم إذا كان أكبر من آخر يوم صالح في الشهر الجديد؛ إذا كان كذلك (كما في الحالة أعلاه)، يتم تعديل رقم اليوم إلى آخر يوم صالح (28). ما هي العواقب مع هذا النهج؟ تابع وأضف شهرًا آخر إلى تاريخنا، 2014-02-28 + Month(1) == 2014-03-28. ماذا؟ هل كنت تتوقع آخر يوم من مارس؟ لا، آسف، تذكر الفتحات 7-7-7. أقل عدد ممكن من الفتحات سيتغير، لذا نقوم أولاً بزيادة خانة الشهر بمقدار 1، 2014-03-28، وبوم، نحن انتهينا لأن هذا تاريخ صالح. من ناحية أخرى، إذا كنا سنضيف شهرين إلى تاريخنا الأصلي، 2014-01-31، فإننا ننتهي بـ 2014-03-31، كما هو متوقع. العاقبة الأخرى لهذا النهج هي فقدان التبادلية عندما يتم فرض ترتيب محدد (أي أن إضافة الأشياء بترتيبات مختلفة تؤدي إلى نتائج مختلفة). على سبيل المثال:

julia> (Date(2014,1,29)+Dates.Day(1)) + Dates.Month(1)
2014-02-28

julia> (Date(2014,1,29)+Dates.Month(1)) + Dates.Day(1)
2014-03-01

ما الذي يحدث هناك؟ في السطر الأول، نحن نضيف يومًا واحدًا إلى 29 يناير، مما يؤدي إلى 2014-01-30؛ ثم نضيف شهرًا واحدًا، لذا نحصل على 2014-02-30، والذي يتم تعديله إلى 2014-02-28. في المثال الثاني، نضيف شهرًا واحدًا أولاً، حيث نحصل على 2014-02-29، والذي يتم تعديله إلى 2014-02-28، و ثم نضيف يومًا واحدًا، مما يؤدي إلى 2014-03-01. مبدأ تصميم واحد يساعد في هذه الحالة هو أنه، في وجود فترات متعددة، سيتم ترتيب العمليات حسب أنواع الفترات، وليس حسب قيمتها أو ترتيبها الموضعي؛ وهذا يعني أن Year سيتم إضافته دائمًا أولاً، ثم Month، ثم Week، وما إلى ذلك. ومن ثم، فإن ما يلي يؤدي إلى التجميع ويعمل بشكل صحيح:

julia> Date(2014,1,29) + Dates.Day(1) + Dates.Month(1)
2014-03-01

julia> Date(2014,1,29) + Dates.Month(1) + Dates.Day(1)
2014-03-01

خادع؟ ربما. ماذا يمكن لمستخدم Dates البريء أن يفعل؟ الخلاصة هي أن تكون واعيًا أن فرض ترابط معين بشكل صريح، عند التعامل مع الأشهر، قد يؤدي إلى بعض النتائج غير المتوقعة، ولكن بخلاف ذلك، يجب أن تعمل كل الأمور كما هو متوقع. لحسن الحظ، هذا هو إلى حد كبير مدى الحالات الغريبة في حسابات فترات التاريخ عند التعامل مع الوقت في UT (تجنب "أفراح" التعامل مع التوقيت الصيفي، ثواني الكبيسة، إلخ).

كميزة إضافية، تعمل جميع كائنات الحساب الزمني مباشرة مع النطاقات:

julia> dr = Date(2014,1,29):Day(1):Date(2014,2,3)
Date("2014-01-29"):Day(1):Date("2014-02-03")

julia> collect(dr)
6-element Vector{Date}:
 2014-01-29
 2014-01-30
 2014-01-31
 2014-02-01
 2014-02-02
 2014-02-03

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Vector{Date}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29

Adjuster Functions

بقدر ما تكون حسابات فترات التواريخ مريحة، غالبًا ما تأخذ أنواع الحسابات المطلوبة على التواريخ طابعًا تقويميًا أو زمانيًا بدلاً من عدد ثابت من الفترات. العطلات هي مثال مثالي؛ حيث تتبع معظمها قواعد مثل "يوم الذكرى = آخر يوم اثنين من مايو"، أو "عيد الشكر = الخميس الرابع من نوفمبر". تتعامل هذه الأنواع من التعبيرات الزمنية مع قواعد تتعلق بالتقويم، مثل الأول أو الأخير من الشهر، الثلاثاء المقبل، أو الأربعاء الأول والثالث، إلخ.

يوفر نموذج Dates واجهة برمجة التطبيقات المعدل من خلال عدة طرق ملائمة تساعد في التعبير ببساطة واختصار عن القواعد الزمنية. تتعامل المجموعة الأولى من طرق المعدل مع الأول والأخير من الأسابيع، الأشهر، الأرباع، والسنوات. تأخذ كل منها مدخلًا واحدًا TimeType وتعيد أو تعدل إلى الأول أو الأخير من الفترة المرغوبة بالنسبة للمدخل.

julia> Dates.firstdayofweek(Date(2014,7,16)) # Adjusts the input to the Monday of the input's week
2014-07-14

julia> Dates.lastdayofmonth(Date(2014,7,16)) # Adjusts to the last day of the input's month
2014-07-31

julia> Dates.lastdayofquarter(Date(2014,7,16)) # Adjusts to the last day of the input's quarter
2014-09-30

الطرق الأعلى ترتيبًا التالية، tonext، و toprev، تعمم العمل مع التعبيرات الزمنية من خلال أخذ DateFunction كأول وسيط، جنبًا إلى جنب مع TimeType البداية. DateFunction هي مجرد دالة، عادةً ما تكون مجهولة، تأخذ 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566 واحدة كمدخل وتعيد Bool، حيث تشير true إلى معيار تعديل مُرضٍ. على سبيل المثال:

julia> istuesday = x->Dates.dayofweek(x) == Dates.Tuesday; # Returns true if the day of the week of x is Tuesday

julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 is a Sunday
2014-07-15

julia> Dates.tonext(Date(2014,7,13), Dates.Tuesday) # Convenience method provided for day of the week adjustments
2014-07-15

هذا مفيد مع بناء جملة do-block للتعبيرات الزمنية الأكثر تعقيدًا:

julia> Dates.tonext(Date(2014,7,13)) do x
           # Return true on the 4th Thursday of November (Thanksgiving)
           Dates.dayofweek(x) == Dates.Thursday &&
           Dates.dayofweekofmonth(x) == 4 &&
           Dates.month(x) == Dates.November
       end
2014-11-27

يمكن استخدام طريقة Base.filter للحصول على جميع التواريخ/اللحظات الصالحة في نطاق محدد:

# Pittsburgh street cleaning; Every 2nd Tuesday from April to November
# Date range from January 1st, 2014 to January 1st, 2015
julia> dr = Dates.Date(2014):Day(1):Dates.Date(2015);

julia> filter(dr) do x
           Dates.dayofweek(x) == Dates.Tue &&
           Dates.April <= Dates.month(x) <= Dates.Nov &&
           Dates.dayofweekofmonth(x) == 2
       end
8-element Vector{Date}:
 2014-04-08
 2014-05-13
 2014-06-10
 2014-07-08
 2014-08-12
 2014-09-09
 2014-10-14
 2014-11-11

أمثلة واختبارات إضافية متاحة في stdlib/Dates/test/adjusters.jl.

Period Types

الفترات هي وجهة نظر إنسانية لفترات زمنية منفصلة، وأحيانًا غير منتظمة. اعتبر شهرًا واحدًا؛ يمكن أن يمثل، بالأيام، قيمة 28 أو 29 أو 30 أو 31 اعتمادًا على سياق السنة والشهر. أو يمكن أن تمثل السنة 365 أو 366 يومًا في حالة السنة الكبيسة. Period أنواع هي Int64 أغلفة بسيطة وتُبنى عن طريق تغليف أي نوع قابل للتحويل إلى Int64، أي Year(1) أو Month(3.0). العمليات الحسابية بين 4d61726b646f776e2e436f64652822222c2022506572696f642229_40726566 من نفس النوع تتصرف مثل الأعداد الصحيحة، وتتوفر عمليات حسابية محدودة بين Period-Real. يمكنك استخراج العدد الصحيح الأساسي باستخدام Dates.value.

julia> y1 = Dates.Year(1)
1 year

julia> y2 = Dates.Year(2)
2 years

julia> y3 = Dates.Year(10)
10 years

julia> y1 + y2
3 years

julia> div(y3,y2)
5

julia> y3 - y2
8 years

julia> y3 % y2
0 years

julia> div(y3,3) # mirrors integer division
3 years

julia> Dates.value(Dates.Millisecond(10))
10

تمثيل الفترات أو المدد التي ليست مضاعفات صحيحة للأنواع الأساسية يمكن تحقيقه باستخدام نوع Dates.CompoundPeriod. يمكن بناء الفترات المركبة يدويًا من أنواع Period البسيطة. بالإضافة إلى ذلك، يمكن استخدام الدالة canonicalize لتفكيك فترة إلى 4d61726b646f776e2e436f64652822222c202244617465732e436f6d706f756e64506572696f642229_40726566. هذا مفيد بشكل خاص لتحويل مدة، على سبيل المثال، فرق بين تاريخين DateTime، إلى تمثيل أكثر ملاءمة.

julia> cp = Dates.CompoundPeriod(Day(1),Minute(1))
1 day, 1 minute

julia> t1 = DateTime(2018,8,8,16,58,00)
2018-08-08T16:58:00

julia> t2 = DateTime(2021,6,23,10,00,00)
2021-06-23T10:00:00

julia> canonicalize(t2-t1) # creates a CompoundPeriod
149 weeks, 6 days, 17 hours, 2 minutes

Rounding

Date و DateTime يمكن تقريبهما إلى دقة محددة (مثل، شهر واحد أو 15 دقيقة) مع floor، ceil، أو round:

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day)
2016-08-07T00:00:00

على عكس طريقة round الرقمية، التي تكسر الروابط نحو الرقم الزوجي بشكل افتراضي، تستخدم طريقة TimeType4d61726b646f776e2e436f64652822222c2022726f756e642229_40726566 وضع التقريب RoundNearestTiesUp. (من الصعب تخمين ما قد يتضمنه كسر الروابط لأقرب "زوجي" 4d61726b646f776e2e436f64652822222c202254696d65547970652229_40726566.) يمكن العثور على مزيد من التفاصيل حول أوضاع RoundingMode المتاحة في API reference.

يجب أن يتصرف التقريب بشكل عام كما هو متوقع، ولكن هناك بعض الحالات التي لا يكون فيها السلوك المتوقع واضحًا.

Rounding Epoch

في العديد من الحالات، فإن الدقة المحددة للتقريب (على سبيل المثال، Dates.Second(30)) تقسم بالتساوي إلى الفترة الأكبر التالية (في هذه الحالة، Dates.Minute(1)). ولكن سلوك التقريب في الحالات التي لا يكون فيها هذا صحيحًا قد يؤدي إلى الارتباك. ما هو النتيجة المتوقعة لتقريب DateTime إلى أقرب 10 ساعات؟

julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00

قد يبدو ذلك محيرًا، نظرًا لأن الساعة (12) ليست قابلة للقسمة على 10. السبب في اختيار 2016-07-17T12:00:00 هو أنه بعد 17,676,660 ساعة من 0000-01-01T00:00:00، و17,676,660 قابلة للقسمة على 10.

كما تم تمثيل قيم جوليا Date و DateTime وفقًا لمعيار ISO 8601، تم اختيار 0000-01-01T00:00:00 كقاعدة (أو "عصر التقريب") التي تبدأ منها حساب الأيام (والميلي ثانية) المستخدمة في حسابات التقريب. (لاحظ أن هذا يختلف قليلاً عن التمثيل الداخلي لجوليا لـ 4d61726b646f776e2e436f64652822222c2022446174652229_40726566 باستخدام Rata Die notation؛ ولكن نظرًا لأن معيار ISO 8601 هو الأكثر وضوحًا للمستخدم النهائي، تم اختيار 0000-01-01T00:00:00 كعصر التقريب بدلاً من 0000-12-31T00:00:00 المستخدم داخليًا لتقليل الارتباك.)

الاستثناء الوحيد لاستخدام 0000-01-01T00:00:00 كعصر تقريب هو عند التقريب إلى الأسابيع. سيؤدي التقريب إلى أقرب أسبوع دائمًا إلى يوم الاثنين (أول يوم في الأسبوع كما هو محدد بواسطة ISO 8601). لهذا السبب، نستخدم 0000-01-03T00:00:00 (أول يوم من الأسبوع الأول من السنة 0000، كما هو محدد بواسطة ISO 8601) كقاعدة عند التقريب إلى عدد من الأسابيع.

هنا حالة ذات صلة حيث لا يكون السلوك المتوقع واضحًا بالضرورة: ماذا يحدث عندما نقوم بالتقريب إلى أقرب P(2)، حيث P هو نوع Period؟ في بعض الحالات (على وجه التحديد، عندما يكون P <: Dates.TimePeriod) تكون الإجابة واضحة:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Hour(2))
2016-07-17T08:00:00

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Minute(2))
2016-07-17T08:56:00

يبدو أن هذا واضح، لأن اثنين من كل من هذه الفترات لا يزال يقسم بالتساوي إلى الفترة الأكبر التالية. ولكن في حالة الشهرين (التي لا تزال تقسم بالتساوي إلى سنة واحدة)، قد تكون الإجابة مفاجئة:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00

لماذا يتم التقريب إلى اليوم الأول في يوليو، على الرغم من أنه الشهر 7 (رقم فردي)؟ المفتاح هو أن الأشهر مُرقمة من 1 (الشهر الأول مُعين 1)، على عكس الساعات والدقائق والثواني والميلي ثانية (التي يتم تعيين أولها 0).

هذا يعني أن تقريب DateTime إلى مضاعف زوجي من الثواني أو الدقائق أو الساعات أو السنوات (لأن مواصفة ISO 8601 تتضمن سنة صفر) سيؤدي إلى 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 بقيمة زوجية في هذا الحقل، بينما تقريب 4d61726b646f776e2e436f64652822222c20224461746554696d652229_40726566 إلى مضاعف زوجي من الأشهر سيؤدي إلى أن يحتوي حقل الأشهر على قيمة فردية. نظرًا لأن الأشهر والسنوات قد تحتوي على عدد غير منتظم من الأيام، فإن ما إذا كان التقريب إلى عدد زوجي من الأيام سيؤدي إلى قيمة زوجية في حقل الأيام غير مؤكد.

انظر إلى API reference لمزيد من المعلومات حول الطرق المصدرة من وحدة Dates.

API reference

Dates and Time Types

Dates.PeriodType
فترة
سنة
ربع
شهر
أسبوع
يوم
ساعة
دقيقة
ثانية
مللي ثانية
ميكرو ثانية
نانوسكند

Period types represent discrete, human representations of time.

source
Dates.CompoundPeriodType
CompoundPeriod

CompoundPeriod مفيد للتعبير عن فترات زمنية ليست مضاعفًا ثابتًا لفترات أصغر. على سبيل المثال، "سنة ويوم" ليست عددًا ثابتًا من الأيام، ولكن يمكن التعبير عنها باستخدام CompoundPeriod. في الواقع، يتم إنشاء CompoundPeriod تلقائيًا من خلال جمع أنواع فترات مختلفة، على سبيل المثال، Year(1) + Day(1) ينتج نتيجة CompoundPeriod.

source
Dates.InstantType
اللحظة

تُمثل أنواع Instant تمثيلات زمنية قائمة على الأعداد الصحيحة، تمثل الزمن كخطوط زمنية مستمرة تبدأ من نقطة البداية.

source
Dates.UTInstantType
UTInstant{T}

يمثل UTInstant خط زمني آلي يعتمد على وقت UT (1 يوم = دورة واحدة للأرض). T هو معلمة Period تشير إلى دقة أو وضوح اللحظة.

source
Dates.TimeTypeType
TimeType

تغليف أنواع TimeType لآلات Instant لتوفير تمثيلات بشرية للحظة الآلية. Time و DateTime و Date هي أنواع فرعية من TimeType.

source
Dates.DateTimeType
DateTime

DateTime يمثل نقطة في الزمن وفقًا للتقويم الغريغوري الاستباقي. أدق دقة للوقت هي المللي ثانية (أي لا يمكن تمثيل الميكروثانية أو النانوثانية بواسطة هذا النوع). يدعم هذا النوع الحسابات ذات النقطة الثابتة، وبالتالي فهو عرضة للانخفاض (والارتفاع). نتيجة ملحوظة هي التقريب عند إضافة Microsecond أو Nanosecond:

julia> dt = DateTime(2023, 8, 19, 17, 45, 32, 900)
2023-08-19T17:45:32.900

julia> dt + Millisecond(1)
2023-08-19T17:45:32.901

julia> dt + Microsecond(1000) # 1000us == 1ms
2023-08-19T17:45:32.901

julia> dt + Microsecond(999) # 999us rounded to 1000us
2023-08-19T17:45:32.901

julia> dt + Microsecond(1499) # 1499 rounded to 1000us
2023-08-19T17:45:32.901
source
Dates.DateType
تاريخ

Date يلتف حول UTInstant{Day} ويفسره وفقًا للتقويم الغريغوري الاستباقي.

source
Dates.TimeType
الوقت

الوقت يلتف حول نانosecond ويمثل لحظة معينة في يوم مدته 24 ساعة.

source
Dates.TimeZoneType
TimeZone

منطقة جغرافية تعتمد بشكل عام على خط الطول لتحديد الوقت في موقع معين. بعض المناطق الزمنية تلاحظ التوقيت الصيفي (مثل EST -> EDT). لمزيد من التنفيذات والدعم، راجع حزمة TimeZones.jl

source
Dates.UTCType
UTC

UTC، أو الوقت العالمي المنسق، هو TimeZone الذي يتم قياس جميع الأوقات الأخرى منه. وهو مرتبط بالوقت عند خط الطول 0°. لا يتم تعديله لتوفير التوقيت الصيفي.

source

Dates Functions

Dates.DateTimeMethod
DateTime(y, [m, d, h, mi, s, ms]) -> DateTime

قم بإنشاء نوع DateTime من الأجزاء. يجب أن تكون المعاملات قابلة للتحويل إلى Int64.

source
Dates.DateTimeMethod
DateTime(periods::Period...) -> DateTime

قم بإنشاء نوع DateTime بواسطة أجزاء من نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستتخذ أجزاء DateTime التي لم يتم توفيرها القيمة الافتراضية لـ Dates.default(period).

source
Dates.DateTimeMethod
DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime

قم بإنشاء DateTime من خلال واجهة برمجة التطبيقات الخاصة بالتعديل. سيتم بناء نقطة البداية من المعطيات المقدمة y, m, d...، وسيتم تعديلها حتى تُرجع f::Function القيمة true. يمكن توفير حجم الخطوة في التعديل يدويًا من خلال الكلمة الرئيسية step. يوفر limit حدًا لعدد التكرارات القصوى التي ستسعى إليها واجهة برمجة التطبيقات للتعديل قبل أن تُطلق خطأ (في حالة عدم تحقيق f::Function).

أمثلة

julia> DateTime(dt -> second(dt) == 40, 2010, 10, 20, 10; step = Second(1))
2010-10-20T10:00:40

julia> DateTime(dt -> hour(dt) == 20, 2010, 10, 20, 10; step = Hour(1), limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateTimeMethod
DateTime(dt::Date) -> DateTime

تحويل Date إلى DateTime. يتم افتراض أن أجزاء الساعة والدقيقة والثانية والمللي ثانية من DateTime الجديد هي صفر.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime

قم بإنشاء DateTime عن طريق تحليل سلسلة تاريخ ووقت dt وفقًا للنمط المحدد في سلسلة format (انظر DateFormat للترميز).

!!! ملاحظة هذه الطريقة تنشئ كائن DateFormat في كل مرة يتم استدعاؤها. يُوصى بأن تقوم بإنشاء كائن DateFormat بدلاً من ذلك واستخدامه كوسيط ثانٍ لتجنب فقدان الأداء عند استخدام نفس التنسيق بشكل متكرر.

أمثلة

julia> DateTime("2020-01-01", "yyyy-mm-dd")
2020-01-01T00:00:00

julia> a = ("2020-01-01", "2020-01-02");

julia> [DateTime(d, dateformat"yyyy-mm-dd") for d ∈ a] # مفضل
2-element Vector{DateTime}:
 2020-01-01T00:00:00
 2020-01-02T00:00:00
source
Dates.formatMethod
format(dt::TimeType, format::AbstractString; locale="arabic") -> AbstractString

قم بإنشاء سلسلة باستخدام كائن TimeType وتطبيق التنسيق المقدم. يمكن استخدام رموز الأحرف التالية لبناء سلسلة format:

الرمزالأمثلةالتعليق
y6السنة الرقمية بعرض ثابت
Y1996السنة الرقمية بعرض أدنى
m1, 12الشهر الرقمي بعرض أدنى
uJanاسم الشهر مختصر إلى 3 أحرف وفقًا لـ locale
UJanuaryالاسم الكامل للشهر وفقًا لكلمة locale
d1, 31يوم الشهر بعرض أدنى
H0, 23الساعة (ساعة 24) بعرض أدنى
M0, 59الدقيقة بعرض أدنى
S0, 59الثانية بعرض أدنى
s000, 500المللي ثانية بعرض أدنى من 3
eMon, Tueالأيام المختصرة من الأسبوع
EMondayالاسم الكامل ليوم الأسبوع

عدد رموز الأحرف المتتالية يشير إلى عرض الرمز. تنسيق yyyy-mm يحدد أن الرمز y يجب أن يكون بعرض أربعة بينما m بعرض اثنين. الرموز التي تعطي أرقامًا رقمية لها وضع مرتبط: عرض ثابت أو عرض أدنى. وضع العرض الثابت يضيف أصفارًا على اليسار عندما يكون أقصر من العرض المحدد ويقطع القيمة عندما تكون أطول. وضع العرض الأدنى يعمل بنفس طريقة العرض الثابت باستثناء أنه لا يقطع القيم الأطول من العرض.

عند إنشاء format يمكنك استخدام أي أحرف غير رموز كفاصل. على سبيل المثال، لتوليد السلسلة "1996-01-15T00:00:00" يمكنك استخدام format: "yyyy-mm-ddTHH:MM:SS". لاحظ أنه إذا كنت بحاجة لاستخدام رمز كحرف حرفي يمكنك استخدام حرف الهروب (backslash). يمكن إنتاج السلسلة "1996y01m" باستخدام التنسيق "yyyy\ymm\m".

source
Dates.DateFormatType
DateFormat(format::AbstractString, locale="العربية") -> DateFormat

قم بإنشاء كائن تنسيق تاريخ يمكن استخدامه لتحليل سلاسل التاريخ أو تنسيق كائن التاريخ كسلسلة. يمكن استخدام رموز الأحرف التالية لبناء سلسلة format:

الرمزالمطابقةالتعليق
Y1996, 96يعيد سنة 1996، 0096
y1996, 96نفس Y عند parse ولكن يتجاهل الأرقام الزائدة عند format
m1, 01يطابق الأشهر ذات الرقم 1 أو 2
uJanيطابق الأشهر المختصرة وفقًا لكلمة locale
UJanuaryيطابق أسماء الأشهر الكاملة وفقًا لكلمة locale
d1, 01يطابق الأيام ذات الرقم 1 أو 2
H00يطابق الساعات (ساعة 24)
I00لإخراج الساعات بنظام 12 ساعة
M00يطابق الدقائق
S00يطابق الثواني
s.500يطابق المللي ثانية
eMon, Tuesيطابق الأيام المختصرة من الأسبوع
EMondayيطابق أسماء الأيام الكاملة من الأسبوع
pAMيطابق AM/PM (غير حساسة لحالة الأحرف)
yyyymmdd19960101يطابق السنة والشهر واليوم بعرض ثابت

تُعتبر الأحرف غير المدرجة أعلاه عادةً فواصل بين أجزاء التاريخ والوقت. على سبيل المثال، ستكون سلسلة dt "1996-01-15T00:00:00.0" لها سلسلة format مثل "y-m-dTH:M:S.s". إذا كنت بحاجة لاستخدام رمز حرف كفاصل، يمكنك الهروب منه باستخدام الشرطة المائلة. سيكون التاريخ "1995y01m" له التنسيق "y\ym\m".

لاحظ أن 12:00AM تتوافق مع 00:00 (منتصف الليل)، و12:00PM تتوافق مع 12:00 (الظهر). عند تحليل وقت مع محدد p، يتم تفسير أي ساعة (سواء H أو I) كنظام 12 ساعة، لذا فإن رمز I مفيد بشكل أساسي للإخراج.

إنشاء كائن DateFormat مكلف. كلما كان ذلك ممكنًا، قم بإنشائه مرة واحدة واستخدمه عدة مرات أو جرب ماكرو سلسلة dateformat"". استخدام هذا الماكرو ينشئ كائن DateFormat مرة واحدة في وقت توسيع الماكرو ويعيد استخدامه لاحقًا. هناك أيضًا العديد من المحددات المعرفة مسبقًا، المدرجة لاحقًا.

انظر DateTime و format لمعرفة كيفية استخدام كائن DateFormat لتحليل وكتابة سلاسل التاريخ على التوالي.

source
Dates.@dateformat_strMacro
dateformat"Y-m-d H:M:S"

قم بإنشاء كائن DateFormat. مشابه لـ DateFormat("Y-m-d H:M:S") ولكنه ينشئ كائن DateFormat مرة واحدة أثناء توسيع الماكرو.

راجع DateFormat للحصول على تفاصيل حول محددات التنسيق.

source
Dates.DateTimeMethod
DateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTime

قم بإنشاء DateTime عن طريق تحليل سلسلة تاريخ ووقت dt وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"yyyy-mm-dd\THH:MM:SS.s" إذا تم حذفها.

مماثل لـ DateTime(::AbstractString, ::AbstractString) ولكنه أكثر كفاءة عند تحليل سلاسل تاريخ ووقت بتنسيق مشابه بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.

source
Dates.DateMethod
Date(y, [m, d]) -> Date

قم بإنشاء نوع Date من الأجزاء. يجب أن تكون الوسائط قابلة للتحويل إلى Int64.

source
Dates.DateMethod
Date(period::Period...) -> Date

قم بإنشاء نوع Date من أجزاء نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستعود أجزاء Date التي لم يتم توفيرها إلى قيمة Dates.default(period).

source
Dates.DateMethod
Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date

قم بإنشاء Date من خلال واجهة تعديل الوقت. سيتم بناء نقطة البداية من المعطيات المقدمة y, m, d، وسيتم تعديلها حتى تُرجع f::Function القيمة true. يمكن توفير حجم الخطوة في التعديل يدويًا من خلال الكلمة المفتاحية step. يوفر limit حدًا لعدد التكرارات القصوى التي ستسعى إليها واجهة التعديل قبل أن تُطلق خطأ (بشرط أن لا يتم تحقيق f::Function أبدًا).

أمثلة

julia> Date(date -> week(date) == 20, 2010, 01, 01)
2010-05-17

julia> Date(date -> year(date) == 2010, 2000, 01, 01)
2010-01-01

julia> Date(date -> month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.DateMethod
Date(dt::DateTime) -> Date

تحويل DateTime إلى Date. يتم اقتطاع أجزاء الساعة والدقيقة والثانية والمللي ثانية من DateTime، لذا يتم استخدام أجزاء السنة والشهر واليوم فقط في البناء.

source
Dates.DateMethod
Date(d::AbstractString, format::AbstractString; locale="arabic") -> Date

قم بإنشاء Date عن طريق تحليل سلسلة التاريخ d وفقًا للنمط المحدد في سلسلة format (انظر DateFormat للترميز).

!!! ملاحظة هذه الطريقة تنشئ كائن DateFormat في كل مرة يتم استدعاؤها. يُوصى بأن تقوم بإنشاء كائن DateFormat بدلاً من ذلك واستخدامه كوسيط ثانٍ لتجنب فقدان الأداء عند استخدام نفس التنسيق بشكل متكرر.

أمثلة

julia> Date("2020-01-01", "yyyy-mm-dd")
2020-01-01

julia> a = ("2020-01-01", "2020-01-02");

julia> [Date(d, dateformat"yyyy-mm-dd") for d ∈ a] # مفضل
2-element Vector{Date}:
 2020-01-01
 2020-01-02
source
Dates.DateMethod
Date(d::AbstractString, df::DateFormat=ISODateFormat) -> Date

قم بإنشاء Date عن طريق تحليل سلسلة التاريخ d وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"yyyy-mm-dd" إذا تم حذفها.

مماثل لـ Date(::AbstractString, ::AbstractString) ولكنه أكثر كفاءة عند تحليل سلاسل التاريخ ذات التنسيق المماثل بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.

source
Dates.TimeMethod
Time(h, [mi, s, ms, us, ns]) -> Time

قم بإنشاء نوع Time من الأجزاء. يجب أن تكون الوسائط قابلة للتحويل إلى Int64.

source
Dates.TimeMethod
Time(period::TimePeriod...) -> Time

قم بإنشاء نوع Time من أجزاء نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستتخذ أجزاء Time التي لم يتم توفيرها القيمة الافتراضية لـ Dates.default(period).

source
Dates.TimeMethod
Time(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000)
Time(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)

قم بإنشاء Time من خلال واجهة برمجة التطبيقات الخاصة بالضبط. سيتم بناء نقطة البداية من الوسائط المقدمة h, mi, s, ms, us، وسيتم ضبطها حتى تُرجع f::Function القيمة true. يمكن توفير حجم الخطوة في الضبط يدويًا من خلال الكلمة الرئيسية step. يوفر limit حدًا لعدد التكرارات القصوى التي ستسعى إليها واجهة برمجة التطبيقات للضبط قبل أن تُطلق خطأ (في حالة عدم تلبية f::Function). لاحظ أن الخطوة الافتراضية ستضبط للسماح بدقة أكبر للوسائط المعطاة؛ أي إذا تم تقديم وسائط الساعة والدقيقة والثانية، ستكون الخطوة الافتراضية هي Millisecond(1) بدلاً من Second(1).

أمثلة

julia> Time(t -> minute(t) == 30, 20)
20:30:00

julia> Time(t -> minute(t) == 0, 20)
20:00:00

julia> Time(t -> hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source
Dates.TimeMethod
Time(dt::DateTime) -> Time

تحويل DateTime إلى Time. يتم استخدام أجزاء الساعة والدقيقة والثانية والميلي ثانية من DateTime لإنشاء Time جديدة. تكون الميكروثانية والنانثانية صفرًا بشكل افتراضي.

source
Dates.TimeMethod
Time(t::AbstractString, format::AbstractString; locale="english") -> Time

قم بإنشاء Time عن طريق تحليل سلسلة الوقت t وفقًا للنمط المحدد في سلسلة format (انظر DateFormat للتركيب).

!!! ملاحظة هذه الطريقة تنشئ كائن DateFormat في كل مرة يتم استدعاؤها. يُوصى بأن تقوم بإنشاء كائن DateFormat بدلاً من ذلك واستخدامه كوسيط ثانٍ لتجنب فقدان الأداء عند استخدام نفس التنسيق بشكل متكرر.

أمثلة

julia> Time("12:34pm", "HH:MMp")
12:34:00

julia> a = ("12:34pm", "2:34am");

julia> [Time(d, dateformat"HH:MMp") for d ∈ a] # مفضل
2-element Vector{Time}:
 12:34:00
 02:34:00
source
Dates.TimeMethod
Time(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Time

قم بإنشاء Time عن طريق تحليل سلسلة تاريخ ووقت t وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"HH:MM:SS.s" إذا تم حذفها.

مشابه لـ Time(::AbstractString, ::AbstractString) ولكن أكثر كفاءة عند تحليل سلاسل الوقت ذات التنسيق المماثل بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.

source
Dates.nowMethod
now() -> DateTime

إرجاع DateTime يتوافق مع وقت نظام المستخدم بما في ذلك منطقة زمنية النظام.

source
Dates.nowMethod
now(::Type{UTC}) -> DateTime

إرجاع DateTime يتوافق مع وقت نظام المستخدم بتوقيت UTC/GMT. لمناطق زمنية أخرى، راجع حزمة TimeZones.jl.

أمثلة

julia> now(UTC)
2023-01-04T10:52:24.864
source
Base.epsMethod
eps(::Type{DateTime}) -> Millisecond
eps(::Type{Date}) -> Day
eps(::Type{Time}) -> Nanosecond
eps(::TimeType) -> Period

إرجاع أصغر قيمة وحدة مدعومة بواسطة TimeType.

أمثلة

julia> eps(DateTime)
1 millisecond

julia> eps(Date)
1 day

julia> eps(Time)
1 nanosecond
source

Accessor Functions

Dates.weekFunction
week(dt::TimeType) -> Int64

إرجاع تاريخ الأسبوع ISO لـ Date أو DateTime كـ Int64. لاحظ أن الأسبوع الأول من السنة هو الأسبوع الذي يحتوي على أول يوم خميس من السنة، مما قد يؤدي إلى أن تكون التواريخ قبل 4 يناير في الأسبوع الأخير من السنة السابقة. على سبيل المثال، week(Date(2005, 1, 1)) هو الأسبوع 53 من عام 2004.

أمثلة

julia> week(Date(1989, 6, 22))
25

julia> week(Date(2005, 1, 1))
53

julia> week(Date(2004, 12, 31))
53
source
Dates.dayFunction
day(dt::TimeType) -> Int64

يوم الشهر من Date أو DateTime كـ Int64.

source
Dates.millisecondFunction
millisecond(dt::DateTime) -> Int64

الملي ثانية من DateTime كـ Int64.

source
millisecond(t::Time) -> Int64

الميلي ثانية من Time كـ Int64.

source
Dates.YearMethod
Year(v)

قم بإنشاء كائن Year بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.

source
Dates.MonthMethod
Month(v)

قم بإنشاء كائن Month بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.

source
Dates.WeekMethod
Week(v)

قم بإنشاء كائن Week بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.

source
Dates.DayMethod
Day(v)

قم بإنشاء كائن Day بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.

source
Dates.HourMethod
Hour(dt::DateTime) -> Hour

الجزء الساعي من DateTime كـ Hour.

source
Dates.MinuteMethod
Minute(dt::DateTime) -> Minute

الجزء الدقيق من DateTime كـ Minute.

source
Dates.SecondMethod
Second(dt::DateTime) -> Second

الجزء الثاني من DateTime كـ Second.

source
Dates.MillisecondMethod
Millisecond(dt::DateTime) -> Millisecond

جزء الميلي ثانية من DateTime كـ Millisecond.

source
Dates.MicrosecondMethod
Microsecond(dt::Time) -> Microsecond

جزء الميكروثانية من الوقت كـ Microsecond.

source
Dates.NanosecondMethod
Nanosecond(dt::Time) -> Nanosecond

جزء النانوثانية من الوقت كـ Nanosecond.

source
Dates.yearmonthFunction
yearmonth(dt::TimeType) -> (Int64, Int64)

إرجاع أجزاء السنة والشهر من Date أو DateTime في نفس الوقت.

source
Dates.monthdayFunction
monthday(dt::TimeType) -> (Int64, Int64)

يُعيد في نفس الوقت أجزاء الشهر واليوم من Date أو DateTime.

source
Dates.yearmonthdayFunction
yearmonthday(dt::TimeType) -> (Int64, Int64, Int64)

إرجاع أجزاء السنة والشهر واليوم من Date أو DateTime في وقت واحد.

source

Query Functions

Dates.daynameFunction
dayname(dt::TimeType; locale="العربية") -> String
dayname(day::Integer; locale="العربية") -> String

Return the full day name corresponding to the day of the week of the Date or DateTime in the given locale. Also accepts Integer.

أمثلة

julia> dayname(Date("2000-01-01"))
"السبت"

julia> dayname(4)
"الخميس"
source
Dates.dayabbrFunction
dayabbr(dt::TimeType; locale="العربية") -> String
dayabbr(day::Integer; locale="العربية") -> String

Return the abbreviated name corresponding to the day of the week of the Date or DateTime in the given locale. Also accepts Integer.

أمثلة

julia> dayabbr(Date("2000-01-01"))
"سبت"

julia> dayabbr(3)
"أربعاء"
source
Dates.dayofweekFunction
dayofweek(dt::TimeType) -> Int64

إرجاع يوم الأسبوع كـ Int64 مع 1 = الإثنين، 2 = الثلاثاء، إلخ..

أمثلة

julia> dayofweek(Date("2000-01-01"))
6
source
Dates.dayofweekofmonthFunction
dayofweekofmonth(dt::TimeType) -> Int

لليوم من الأسبوع لـ dt، ارجع أي رقم هو في شهر dt. لذا إذا كان يوم الأسبوع لـ dt هو الإثنين، فإن 1 = الإثنين الأول من الشهر، 2 = الإثنين الثاني من الشهر، إلخ. في النطاق 1:5.

أمثلة

julia> dayofweekofmonth(Date("2000-02-01"))
1

julia> dayofweekofmonth(Date("2000-02-08"))
2

julia> dayofweekofmonth(Date("2000-02-15"))
3
source
Dates.daysofweekinmonthFunction
daysofweekinmonth(dt::TimeType) -> Int

لليوم من الأسبوع لـ dt، ارجع العدد الإجمالي لذلك اليوم من الأسبوع في شهر dt. يعيد 4 أو 5. مفيد في التعبيرات الزمنية لتحديد آخر يوم من الأسبوع في شهر من خلال تضمين dayofweekofmonth(dt) == daysofweekinmonth(dt) في دالة التعديل.

أمثلة

julia> daysofweekinmonth(Date("2005-01-01"))
5

julia> daysofweekinmonth(Date("2005-01-04"))
4
source
Dates.monthnameFunction
monthname(dt::TimeType; locale="العربية") -> String
monthname(month::Integer, locale="العربية") -> String

Return the full name of the month of the Date or DateTime or Integer in the given locale.

أمثلة

julia> monthname(Date("2005-01-04"))
"يناير"

julia> monthname(2)
"فبراير"
source
Dates.monthabbrFunction
monthabbr(dt::TimeType; locale="العربية") -> String
monthabbr(month::Integer, locale="العربية") -> String

Return the abbreviated month name of the Date or DateTime or Integer in the given locale.

أمثلة

julia> monthabbr(Date("2005-01-04"))
"يناير"

julia> monthabbr(2)
"فبراير"
source
Dates.daysinmonthFunction
daysinmonth(dt::TimeType) -> Int

إرجاع عدد الأيام في شهر dt. ستكون القيمة 28 أو 29 أو 30 أو 31.

أمثلة

julia> daysinmonth(Date("2000-01"))
31

julia> daysinmonth(Date("2001-02"))
28

julia> daysinmonth(Date("2000-02"))
29
source
Dates.isleapyearFunction
isleapyear(dt::TimeType) -> Bool

ارجع true إذا كانت سنة dt سنة كبيسة.

أمثلة

julia> isleapyear(Date("2004"))
true

julia> isleapyear(Date("2005"))
false
source
Dates.dayofyearFunction
dayofyear(dt::TimeType) -> Int

إرجاع يوم السنة لـ dt مع اعتبار 1 يناير هو اليوم 1.

source
Dates.daysinyearFunction
daysinyear(dt::TimeType) -> Int

ارجع 366 إذا كانت سنة dt سنة كبيسة، وإلا ارجع 365.

أمثلة

julia> daysinyear(1999)
365

julia> daysinyear(2000)
366
source
Dates.quarterofyearFunction
quarterofyear(dt::TimeType) -> Int

إرجاع الربع الذي يقع فيه dt. نطاق القيم هو 1:4.

source
Dates.dayofquarterFunction
dayofquarter(dt::TimeType) -> Int

إرجاع اليوم من الربع الحالي لـ dt. نطاق القيم هو 1:92.

source

Adjuster Functions

Base.truncMethod
trunc(dt::TimeType, ::Type{Period}) -> TimeType

يقطع قيمة dt وفقًا لنوع Period المقدم.

أمثلة

julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00
source
Dates.firstdayofweekFunction
firstdayofweek(dt::TimeType) -> TimeType

يعدل dt إلى يوم الاثنين من أسبوعه.

أمثلة

julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
source
Dates.lastdayofweekFunction
lastdayofweek(dt::TimeType) -> TimeType

يعدل dt إلى يوم الأحد من أسبوعه.

أمثلة

julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
source
Dates.firstdayofmonthFunction
firstdayofmonth(dt::TimeType) -> TimeType

يعدل dt إلى أول يوم من شهره.

أمثلة

julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
source
Dates.lastdayofmonthFunction
lastdayofmonth(dt::TimeType) -> TimeType

يعدل dt إلى آخر يوم من شهره.

أمثلة

julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
source
Dates.firstdayofyearFunction
firstdayofyear(dt::TimeType) -> TimeType

يعدل dt إلى أول يوم من سنته.

أمثلة

julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
source
Dates.lastdayofyearFunction
lastdayofyear(dt::TimeType) -> TimeType

يعدل dt إلى آخر يوم في سنته.

أمثلة

julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
source
Dates.firstdayofquarterFunction
firstdayofquarter(dt::TimeType) -> TimeType

يعدل dt إلى أول يوم من ربع السنة.

أمثلة

julia> firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00

julia> firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
source
Dates.lastdayofquarterFunction
lastdayofquarter(dt::TimeType) -> TimeType

يعدل dt إلى آخر يوم في ربع السنة.

أمثلة

julia> lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00

julia> lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
source
Dates.tonextMethod
tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

يعدل dt إلى اليوم التالي من الأسبوع الذي يتوافق مع dow حيث 1 = الإثنين، 2 = الثلاثاء، إلخ. يسمح تعيين same=true اعتبار dt الحالي كـ dow التالي، مما يسمح بعدم حدوث أي تعديل.

source
Dates.toprevMethod
toprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

يعدل dt إلى اليوم السابق من الأسبوع الذي يتوافق مع dow حيث 1 = الإثنين، 2 = الثلاثاء، إلخ. يسمح تعيين same=true اعتبار dt الحالي كـ dow السابق، مما يسمح بعدم حدوث أي تعديل.

source
Dates.tofirstFunction
tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType

يعدل dt إلى أول dow من شهره. بدلاً من ذلك، سيعدل of=Year إلى أول dow من السنة.

source
Dates.tolastFunction
tolast(dt::TimeType, dow::Int; of=Month) -> TimeType

يعدل dt إلى آخر dow من شهره. بدلاً من ذلك، سيعدل of=Year إلى آخر dow من السنة.

source
Dates.tonextMethod
tonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType

يعدل dt عن طريق التكرار بحد أقصى limit تكرارات بواسطة زيادات step حتى يُرجع func القيمة true. يجب أن تأخذ func وسيطًا واحدًا من نوع TimeType وتُرجع Bool. يسمح same اعتبار dt في تلبية func.

source
Dates.toprevMethod
toprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType

يعدل dt عن طريق التكرار بحد أقصى limit تكرارات بواسطة زيادات step حتى تعيد func القيمة true. يجب أن تأخذ func وسيطًا واحدًا من نوع TimeType وتعيد Bool. يسمح same اعتبار dt في تلبية func.

source

Periods

Dates.PeriodMethod
سنة(v)
ربع(v)
شهر(v)
أسبوع(v)
يوم(v)
ساعة(v)
دقيقة(v)
ثانية(v)
مللي ثانية(v)
ميكرو ثانية(v)
نانوسيكوند(v)

قم بإنشاء نوع Period بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.

source
Dates.CompoundPeriodMethod
CompoundPeriod(periods) -> CompoundPeriod

قم بإنشاء CompoundPeriod من Vector من Periods. سيتم جمع جميع Periods من نفس النوع معًا.

أمثلة

julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 hours

julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 hour, 1 minute

julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 month, -2 weeks

julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 minutes
source
Dates.canonicalizeFunction
canonicalize(::CompoundPeriod) -> CompoundPeriod

يقلل CompoundPeriod إلى شكله القياسي من خلال تطبيق القواعد التالية:

  • أي Period كبير بما يكفي ليكون قابلاً للتمثيل جزئيًا بواسطة Period أكثر خشونة سيتم تقسيمه إلى عدة Periods (على سبيل المثال، Hour(30) تصبح Day(1) + Hour(6))
  • سيتم دمج Periods ذات العلامات المعاكسة عند الإمكان (على سبيل المثال، Hour(1) - Day(1) تصبح -Hour(23))

أمثلة

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13)))
1 day, 1 hour

julia> canonicalize(Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1)))
-59 minutes

julia> canonicalize(Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2)))
1 month, -2 weeks

julia> canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
4 weeks, 6 days, 17 hours, 20 minutes
source
Dates.valueFunction
Dates.value(x::Period) -> Int64

لإرجاع القيمة المرتبطة بتلك الفترة. على سبيل المثال، value(Millisecond(10)) تُرجع 10 كعدد صحيح.

source
Dates.defaultFunction
default(p::Period) -> Period

إرجاع قيمة "افتراضية" معقولة لفترة الإدخال عن طريق إرجاع T(1) للسنة والشهر واليوم، و T(0) للساعة والدقيقة والثانية والمللي ثانية.

source
Dates.periodsFunction
Dates.periods(::CompoundPeriod) -> Vector{Period}

إرجاع Vector من Periods التي تتكون من CompoundPeriod المعطاة.

Julia 1.7

تتطلب هذه الدالة Julia 1.7 أو أحدث.

source

Rounding Functions

يمكن تقليل قيم Date و DateTime إلى دقة محددة (مثل 1 شهر أو 15 دقيقة) باستخدام floor أو ceil أو round.

Base.floorMethod
floor(dt::TimeType, p::Period) -> TimeType

إرجاع أقرب Date أو DateTime أقل من أو يساوي dt بدقة p.

لراحة المستخدم، يمكن أن يكون p نوعًا بدلاً من قيمة: floor(dt, Dates.Hour) هو اختصار لـ floor(dt, Dates.Hour(1)).

julia> floor(Date(1985, 8, 16), Month)
1985-08-01

julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-06T00:00:00
source
Base.ceilMethod
ceil(dt::TimeType, p::Period) -> TimeType

إرجاع أقرب Date أو DateTime أكبر من أو يساوي dt بدقة p.

لراحة المستخدم، يمكن أن يكون p نوعًا بدلاً من قيمة: ceil(dt, Dates.Hour) هو اختصار لـ ceil(dt, Dates.Hour(1)).

julia> ceil(Date(1985, 8, 16), Month)
1985-09-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:45:00

julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00
source
Base.roundMethod
round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

إرجاع Date أو DateTime الأقرب إلى dt بدقة p. بشكل افتراضي (RoundNearestTiesUp)، سيتم تقريب الروابط (مثل تقريب 9:30 إلى أقرب ساعة) لأعلى.

لراحة المستخدم، يمكن أن يكون p نوعًا بدلاً من قيمة: round(dt, Dates.Hour) هو اختصار لـ round(dt, Dates.Hour(1)).

julia> round(Date(1985, 8, 16), Month)
1985-08-01

julia> round(DateTime(2013, 2, 13, 0, 31, 20), Minute(15))
2013-02-13T00:30:00

julia> round(DateTime(2016, 8, 6, 12, 0, 0), Day)
2016-08-07T00:00:00

أوضاع التقريب الصالحة لـ round(::TimeType, ::Period, ::RoundingMode) هي RoundNearestTiesUp (افتراضي)، RoundDown (floor)، و RoundUp (ceil).

source

يمكن أيضًا تقريب معظم قيم Period إلى دقة محددة:

Base.floorMethod
floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

قم بتقريب x لأسفل إلى أقرب مضاعف لـ precision. إذا كانت x و precision من أنواع فرعية مختلفة من Period، فستكون قيمة الإرجاع من نفس نوع precision.

لراحة المستخدم، يمكن أن تكون precision نوعًا بدلاً من قيمة: floor(x, Dates.Hour) هو اختصار لـ floor(x, Dates.Hour(1)).

julia> floor(Day(16), Week)
2 weeks

julia> floor(Minute(44), Minute(15))
30 minutes

julia> floor(Hour(36), Day)
1 day

لا يدعم التقريب إلى precision من Months أو Years، حيث أن هذه Periods لها أطوال غير متسقة. ```

source
Base.ceilMethod
ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

قم بتقريب x لأعلى إلى أقرب مضاعف لـ precision. إذا كانت x و precision من أنواع فرعية مختلفة من Period، فستكون قيمة الإرجاع من نفس نوع precision.

لراحة المستخدم، يمكن أن تكون precision نوعًا بدلاً من قيمة: ceil(x, Dates.Hour) هو اختصار لـ ceil(x, Dates.Hour(1)).

julia> ceil(Day(16), Week)
3 weeks

julia> ceil(Minute(44), Minute(15))
45 minutes

julia> ceil(Hour(36), Day)
2 days

لا يدعم التقريب إلى precision من Months أو Years، حيث أن هذه Periods لها أطوال غير متسقة.

source
Base.roundMethod
round(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T

قم بتقريب x إلى أقرب مضاعف لـ precision. إذا كان x و precision من أنواع فرعية مختلفة من Period، فستكون قيمة الإرجاع من نفس نوع precision. بشكل افتراضي (RoundNearestTiesUp)، سيتم تقريب الروابط (مثل تقريب 90 دقيقة إلى أقرب ساعة) لأعلى.

لراحة المستخدم، يمكن أن يكون precision نوعًا بدلاً من قيمة: round(x, Dates.Hour) هو اختصار لـ round(x, Dates.Hour(1)).

julia> round(Day(16), Week)
2 weeks

julia> round(Minute(44), Minute(15))
45 minutes

julia> round(Hour(36), Day)
2 days

أوضاع التقريب الصالحة لـ round(::Period, ::T, ::RoundingMode) هي RoundNearestTiesUp (افتراضي)، RoundDown (floor)، و RoundUp (ceil).

التقريب إلى precision من Months أو Years غير مدعوم، حيث أن هذه Periods ذات طول غير متسق.

source

الوظائف التالية غير مصدرة:

Dates.floorceilFunction
floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)

إرجاع floor و ceil لـ Date أو DateTime في دقة p في نفس الوقت. أكثر كفاءة من استدعاء كل من floor و ceil بشكل فردي.

source
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)

في نفس الوقت، قم بإرجاع floor و ceil لـ Period عند الدقة p. أكثر كفاءة من استدعاء كل من floor و ceil بشكل فردي.

source
Dates.epochdays2dateFunction
epochdays2date(days) -> Date

خذ عدد الأيام منذ بداية العصر (0000-01-01T00:00:00) وأرجع التاريخ المقابل Date.

source
Dates.epochms2datetimeFunction
epochms2datetime(milliseconds) -> DateTime

خذ عدد المللي ثانية منذ بداية العصر (0000-01-01T00:00:00) وأرجع DateTime المقابل.

source
Dates.date2epochdaysFunction
date2epochdays(dt::Date) -> Int64

خذ التاريخ المعطى Date وارجع عدد الأيام منذ بداية العصر (0000-01-01T00:00:00) كـ Int64.

source
Dates.datetime2epochmsFunction
datetime2epochms(dt::DateTime) -> Int64

خذ DateTime المعطاة وارجع عدد المللي ثانية منذ بداية العصر (0000-01-01T00:00:00) كـ Int64.

source

Conversion Functions

Dates.todayFunction
today() -> Date

إرجاع جزء التاريخ من now().

source
Dates.unix2datetimeFunction
unix2datetime(x) -> DateTime

خذ عدد الثواني منذ بداية عصر اليونكس 1970-01-01T00:00:00 وحوّله إلى DateTime المقابل.

source
Dates.datetime2unixFunction
datetime2unix(dt::DateTime) -> Float64

خذ DateTime المعطاة وارجع عدد الثواني منذ بداية عصر اليونكس 1970-01-01T00:00:00 كـ Float64.

source
Dates.julian2datetimeFunction
julian2datetime(julian_days) -> DateTime

خذ عدد أيام التقويم اليولياني منذ العصر -4713-11-24T12:00:00 وأعد القيمة المقابلة لـ DateTime.

source
Dates.datetime2julianFunction
datetime2julian(dt::DateTime) -> Float64

خذ DateTime المعطاة وارجع عدد أيام التقويم اليولياني منذ عصر اليوليان -4713-11-24T12:00:00 كـ Float64.

source
Dates.rata2datetimeFunction
rata2datetime(days) -> DateTime

خذ عدد أيام Rata Die منذ بداية العصر 0000-12-31T00:00:00 وأرجع DateTime المقابل.

source
Dates.datetime2rataFunction
datetime2rata(dt::TimeType) -> Int64

إرجاع عدد أيام راتا دي منذ بداية العصر من Date أو DateTime المعطاة.

source

Constants

أيام الأسبوع:

VariableAbbr.Value (Int)
MondayMon1
TuesdayTue2
WednesdayWed3
ThursdayThu4
FridayFri5
SaturdaySat6
SundaySun7

أشهر السنة:

VariableAbbr.Value (Int)
JanuaryJan1
FebruaryFeb2
MarchMar3
AprilApr4
MayMay5
JuneJun6
JulyJul7
AugustAug8
SeptemberSep9
OctoberOct10
NovemberNov11
DecemberDec12

Common Date Formatters

Dates.ISODateTimeFormatConstant
Dates.ISODateTimeFormat

يصف تنسيق ISO8601 لتاريخ ووقت. هذه هي القيمة الافتراضية لـ Dates.format لـ DateTime.

أمثلة

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"
source
Dates.ISODateFormatConstant
Dates.ISODateFormat

يصف تنسيق ISO8601 لتاريخ. هذه هي القيمة الافتراضية لـ Dates.format لـ Date.

أمثلة

julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"
source
Dates.ISOTimeFormatConstant
Dates.ISOTimeFormat

يصف تنسيق ISO8601 للوقت. هذه هي القيمة الافتراضية لـ Dates.format لـ Time.

أمثلة

julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"
source
Dates.RFC1123FormatConstant
Dates.RFC1123Format

يصف تنسيق RFC1123 لتاريخ ووقت.

أمثلة

julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"الأربعاء، 08 أغسطس 2018 12:00:43"
source
  • 1The notion of the UT second is actually quite fundamental. There are basically two different notions of time generally accepted, one based on the physical rotation of the earth (one full rotation = 1 day), the other based on the SI second (a fixed, constant value). These are radically different! Think about it, a "UT second", as defined relative to the rotation of the earth, may have a different absolute length depending on the day! Anyway, the fact that Date and DateTime are based on UT seconds is a simplifying, yet honest assumption so that things like leap seconds and all their complexity can be avoided. This basis of time is formally called UT or UT1. Basing types on the UT second basically means that every minute has 60 seconds and every day has 24 hours and leads to more natural calculations when working with calendar dates.