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-01Date أو 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، كانت السلاسل الفارغة يمكن تمريرها إلى المنشئات و 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 millisecondsAccessor 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)
735264Query 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-29Adjuster 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 minutesRounding
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.Period — Typeفترة
سنة
ربع
شهر
أسبوع
يوم
ساعة
دقيقة
ثانية
مللي ثانية
ميكرو ثانية
نانوسكندPeriod types represent discrete, human representations of time.
Dates.CompoundPeriod — TypeCompoundPeriodCompoundPeriod مفيد للتعبير عن فترات زمنية ليست مضاعفًا ثابتًا لفترات أصغر. على سبيل المثال، "سنة ويوم" ليست عددًا ثابتًا من الأيام، ولكن يمكن التعبير عنها باستخدام CompoundPeriod. في الواقع، يتم إنشاء CompoundPeriod تلقائيًا من خلال جمع أنواع فترات مختلفة، على سبيل المثال، Year(1) + Day(1) ينتج نتيجة CompoundPeriod.
Dates.Instant — Typeاللحظةتُمثل أنواع Instant تمثيلات زمنية قائمة على الأعداد الصحيحة، تمثل الزمن كخطوط زمنية مستمرة تبدأ من نقطة البداية.
Dates.UTInstant — TypeUTInstant{T}يمثل UTInstant خط زمني آلي يعتمد على وقت UT (1 يوم = دورة واحدة للأرض). T هو معلمة Period تشير إلى دقة أو وضوح اللحظة.
Dates.TimeType — TypeTimeTypeتغليف أنواع TimeType لآلات Instant لتوفير تمثيلات بشرية للحظة الآلية. Time و DateTime و Date هي أنواع فرعية من TimeType.
Dates.DateTime — TypeDateTimeDateTime يمثل نقطة في الزمن وفقًا للتقويم الغريغوري الاستباقي. أدق دقة للوقت هي المللي ثانية (أي لا يمكن تمثيل الميكروثانية أو النانوثانية بواسطة هذا النوع). يدعم هذا النوع الحسابات ذات النقطة الثابتة، وبالتالي فهو عرضة للانخفاض (والارتفاع). نتيجة ملحوظة هي التقريب عند إضافة 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.901Dates.Date — TypeتاريخDate يلتف حول UTInstant{Day} ويفسره وفقًا للتقويم الغريغوري الاستباقي.
Dates.Time — Typeالوقتالوقت يلتف حول نانosecond ويمثل لحظة معينة في يوم مدته 24 ساعة.
Dates.TimeZone — TypeTimeZoneمنطقة جغرافية تعتمد بشكل عام على خط الطول لتحديد الوقت في موقع معين. بعض المناطق الزمنية تلاحظ التوقيت الصيفي (مثل EST -> EDT). لمزيد من التنفيذات والدعم، راجع حزمة TimeZones.jl
Dates.UTC — TypeUTCUTC، أو الوقت العالمي المنسق، هو TimeZone الذي يتم قياس جميع الأوقات الأخرى منه. وهو مرتبط بالوقت عند خط الطول 0°. لا يتم تعديله لتوفير التوقيت الصيفي.
Dates Functions
Dates.DateTime — MethodDateTime(y, [m, d, h, mi, s, ms]) -> DateTimeقم بإنشاء نوع DateTime من الأجزاء. يجب أن تكون المعاملات قابلة للتحويل إلى Int64.
Dates.DateTime — MethodDateTime(periods::Period...) -> DateTimeقم بإنشاء نوع DateTime بواسطة أجزاء من نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستتخذ أجزاء DateTime التي لم يتم توفيرها القيمة الافتراضية لـ Dates.default(period).
Dates.DateTime — MethodDateTime(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:
[...]Dates.DateTime — MethodDateTime(dt::Date) -> DateTimeتحويل Date إلى DateTime. يتم افتراض أن أجزاء الساعة والدقيقة والثانية والمللي ثانية من DateTime الجديد هي صفر.
Dates.DateTime — MethodDateTime(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:00Dates.format — Methodformat(dt::TimeType, format::AbstractString; locale="arabic") -> AbstractStringقم بإنشاء سلسلة باستخدام كائن TimeType وتطبيق التنسيق المقدم. يمكن استخدام رموز الأحرف التالية لبناء سلسلة format:
| الرمز | الأمثلة | التعليق |
|---|---|---|
y | 6 | السنة الرقمية بعرض ثابت |
Y | 1996 | السنة الرقمية بعرض أدنى |
m | 1, 12 | الشهر الرقمي بعرض أدنى |
u | Jan | اسم الشهر مختصر إلى 3 أحرف وفقًا لـ locale |
U | January | الاسم الكامل للشهر وفقًا لكلمة locale |
d | 1, 31 | يوم الشهر بعرض أدنى |
H | 0, 23 | الساعة (ساعة 24) بعرض أدنى |
M | 0, 59 | الدقيقة بعرض أدنى |
S | 0, 59 | الثانية بعرض أدنى |
s | 000, 500 | المللي ثانية بعرض أدنى من 3 |
e | Mon, Tue | الأيام المختصرة من الأسبوع |
E | Monday | الاسم الكامل ليوم الأسبوع |
عدد رموز الأحرف المتتالية يشير إلى عرض الرمز. تنسيق yyyy-mm يحدد أن الرمز y يجب أن يكون بعرض أربعة بينما m بعرض اثنين. الرموز التي تعطي أرقامًا رقمية لها وضع مرتبط: عرض ثابت أو عرض أدنى. وضع العرض الثابت يضيف أصفارًا على اليسار عندما يكون أقصر من العرض المحدد ويقطع القيمة عندما تكون أطول. وضع العرض الأدنى يعمل بنفس طريقة العرض الثابت باستثناء أنه لا يقطع القيم الأطول من العرض.
عند إنشاء format يمكنك استخدام أي أحرف غير رموز كفاصل. على سبيل المثال، لتوليد السلسلة "1996-01-15T00:00:00" يمكنك استخدام format: "yyyy-mm-ddTHH:MM:SS". لاحظ أنه إذا كنت بحاجة لاستخدام رمز كحرف حرفي يمكنك استخدام حرف الهروب (backslash). يمكن إنتاج السلسلة "1996y01m" باستخدام التنسيق "yyyy\ymm\m".
Dates.DateFormat — TypeDateFormat(format::AbstractString, locale="العربية") -> DateFormatقم بإنشاء كائن تنسيق تاريخ يمكن استخدامه لتحليل سلاسل التاريخ أو تنسيق كائن التاريخ كسلسلة. يمكن استخدام رموز الأحرف التالية لبناء سلسلة format:
| الرمز | المطابقة | التعليق |
|---|---|---|
Y | 1996, 96 | يعيد سنة 1996، 0096 |
y | 1996, 96 | نفس Y عند parse ولكن يتجاهل الأرقام الزائدة عند format |
m | 1, 01 | يطابق الأشهر ذات الرقم 1 أو 2 |
u | Jan | يطابق الأشهر المختصرة وفقًا لكلمة locale |
U | January | يطابق أسماء الأشهر الكاملة وفقًا لكلمة locale |
d | 1, 01 | يطابق الأيام ذات الرقم 1 أو 2 |
H | 00 | يطابق الساعات (ساعة 24) |
I | 00 | لإخراج الساعات بنظام 12 ساعة |
M | 00 | يطابق الدقائق |
S | 00 | يطابق الثواني |
s | .500 | يطابق المللي ثانية |
e | Mon, Tues | يطابق الأيام المختصرة من الأسبوع |
E | Monday | يطابق أسماء الأيام الكاملة من الأسبوع |
p | AM | يطابق AM/PM (غير حساسة لحالة الأحرف) |
yyyymmdd | 19960101 | يطابق السنة والشهر واليوم بعرض ثابت |
تُعتبر الأحرف غير المدرجة أعلاه عادةً فواصل بين أجزاء التاريخ والوقت. على سبيل المثال، ستكون سلسلة 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 لتحليل وكتابة سلاسل التاريخ على التوالي.
Dates.@dateformat_str — Macrodateformat"Y-m-d H:M:S"قم بإنشاء كائن DateFormat. مشابه لـ DateFormat("Y-m-d H:M:S") ولكنه ينشئ كائن DateFormat مرة واحدة أثناء توسيع الماكرو.
راجع DateFormat للحصول على تفاصيل حول محددات التنسيق.
Dates.DateTime — MethodDateTime(dt::AbstractString, df::DateFormat=ISODateTimeFormat) -> DateTimeقم بإنشاء DateTime عن طريق تحليل سلسلة تاريخ ووقت dt وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"yyyy-mm-dd\THH:MM:SS.s" إذا تم حذفها.
مماثل لـ DateTime(::AbstractString, ::AbstractString) ولكنه أكثر كفاءة عند تحليل سلاسل تاريخ ووقت بتنسيق مشابه بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.
Dates.Date — MethodDate(y, [m, d]) -> Dateقم بإنشاء نوع Date من الأجزاء. يجب أن تكون الوسائط قابلة للتحويل إلى Int64.
Dates.Date — MethodDate(period::Period...) -> Dateقم بإنشاء نوع Date من أجزاء نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستعود أجزاء Date التي لم يتم توفيرها إلى قيمة Dates.default(period).
Dates.Date — MethodDate(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:
[...]Dates.Date — MethodDate(dt::DateTime) -> Dateتحويل DateTime إلى Date. يتم اقتطاع أجزاء الساعة والدقيقة والثانية والمللي ثانية من DateTime، لذا يتم استخدام أجزاء السنة والشهر واليوم فقط في البناء.
Dates.Date — MethodDate(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-02Dates.Date — MethodDate(d::AbstractString, df::DateFormat=ISODateFormat) -> Dateقم بإنشاء Date عن طريق تحليل سلسلة التاريخ d وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"yyyy-mm-dd" إذا تم حذفها.
مماثل لـ Date(::AbstractString, ::AbstractString) ولكنه أكثر كفاءة عند تحليل سلاسل التاريخ ذات التنسيق المماثل بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.
Dates.Time — MethodTime(h, [mi, s, ms, us, ns]) -> Timeقم بإنشاء نوع Time من الأجزاء. يجب أن تكون الوسائط قابلة للتحويل إلى Int64.
Dates.Time — MethodTime(period::TimePeriod...) -> Timeقم بإنشاء نوع Time من أجزاء نوع Period. يمكن أن تكون الوسائط بأي ترتيب. ستتخذ أجزاء Time التي لم يتم توفيرها القيمة الافتراضية لـ Dates.default(period).
Dates.Time — MethodTime(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:
[...]Dates.Time — MethodTime(dt::DateTime) -> Timeتحويل DateTime إلى Time. يتم استخدام أجزاء الساعة والدقيقة والثانية والميلي ثانية من DateTime لإنشاء Time جديدة. تكون الميكروثانية والنانثانية صفرًا بشكل افتراضي.
Dates.Time — MethodTime(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:00Dates.Time — MethodTime(t::AbstractString, df::DateFormat=ISOTimeFormat) -> Timeقم بإنشاء Time عن طريق تحليل سلسلة تاريخ ووقت t وفقًا للنمط المحدد في كائن DateFormat ، أو dateformat"HH:MM:SS.s" إذا تم حذفها.
مشابه لـ Time(::AbstractString, ::AbstractString) ولكن أكثر كفاءة عند تحليل سلاسل الوقت ذات التنسيق المماثل بشكل متكرر باستخدام كائن DateFormat تم إنشاؤه مسبقًا.
Dates.now — Methodnow() -> DateTimeإرجاع DateTime يتوافق مع وقت نظام المستخدم بما في ذلك منطقة زمنية النظام.
Dates.now — Methodnow(::Type{UTC}) -> DateTimeإرجاع DateTime يتوافق مع وقت نظام المستخدم بتوقيت UTC/GMT. لمناطق زمنية أخرى، راجع حزمة TimeZones.jl.
أمثلة
julia> now(UTC)
2023-01-04T10:52:24.864Base.eps — Methodeps(::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 nanosecondAccessor Functions
Dates.year — Functionyear(dt::TimeType) -> Int64سنة Date أو DateTime كـ Int64.
Dates.month — Functionmonth(dt::TimeType) -> Int64شهر Date أو DateTime كـ Int64.
Dates.week — Functionweek(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))
53Dates.day — Functionday(dt::TimeType) -> Int64يوم الشهر من Date أو DateTime كـ Int64.
Dates.hour — Functionhour(dt::DateTime) -> Int64ساعة اليوم من DateTime كـ Int64.
hour(t::Time) -> Int64ساعة Time كـ Int64.
Dates.minute — Functionminute(dt::DateTime) -> Int64دقيقة من DateTime كـ Int64.
minute(t::Time) -> Int64دقيقة من Time كـ Int64.
Dates.second — Functionsecond(dt::DateTime) -> Int64ثانية من DateTime كـ Int64.
second(t::Time) -> Int64ثانية من Time كـ Int64.
Dates.millisecond — Functionmillisecond(dt::DateTime) -> Int64الملي ثانية من DateTime كـ Int64.
millisecond(t::Time) -> Int64الميلي ثانية من Time كـ Int64.
Dates.microsecond — Functionmicrosecond(t::Time) -> Int64الميكروثانية من Time كـ Int64.
Dates.nanosecond — Functionnanosecond(t::Time) -> Int64النانوثانية من Time كـ Int64.
Dates.Year — MethodYear(v)قم بإنشاء كائن Year بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.
Dates.Month — MethodMonth(v)قم بإنشاء كائن Month بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.
Dates.Week — MethodWeek(v)قم بإنشاء كائن Week بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.
Dates.Day — MethodDay(v)قم بإنشاء كائن Day بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.
Dates.Hour — MethodHour(dt::DateTime) -> Hourالجزء الساعي من DateTime كـ Hour.
Dates.Minute — MethodMinute(dt::DateTime) -> Minuteالجزء الدقيق من DateTime كـ Minute.
Dates.Second — MethodSecond(dt::DateTime) -> Secondالجزء الثاني من DateTime كـ Second.
Dates.Millisecond — MethodMillisecond(dt::DateTime) -> Millisecondجزء الميلي ثانية من DateTime كـ Millisecond.
Dates.Microsecond — MethodMicrosecond(dt::Time) -> Microsecondجزء الميكروثانية من الوقت كـ Microsecond.
Dates.Nanosecond — MethodNanosecond(dt::Time) -> Nanosecondجزء النانوثانية من الوقت كـ Nanosecond.
Dates.yearmonth — Functionyearmonth(dt::TimeType) -> (Int64, Int64)إرجاع أجزاء السنة والشهر من Date أو DateTime في نفس الوقت.
Dates.monthday — Functionmonthday(dt::TimeType) -> (Int64, Int64)يُعيد في نفس الوقت أجزاء الشهر واليوم من Date أو DateTime.
Dates.yearmonthday — Functionyearmonthday(dt::TimeType) -> (Int64, Int64, Int64)إرجاع أجزاء السنة والشهر واليوم من Date أو DateTime في وقت واحد.
Query Functions
Dates.dayname — Functiondayname(dt::TimeType; locale="العربية") -> String
dayname(day::Integer; locale="العربية") -> StringReturn 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)
"الخميس"Dates.dayabbr — Functiondayabbr(dt::TimeType; locale="العربية") -> String
dayabbr(day::Integer; locale="العربية") -> StringReturn 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)
"أربعاء"Dates.dayofweek — Functiondayofweek(dt::TimeType) -> Int64إرجاع يوم الأسبوع كـ Int64 مع 1 = الإثنين، 2 = الثلاثاء، إلخ..
أمثلة
julia> dayofweek(Date("2000-01-01"))
6Dates.dayofmonth — Functiondayofmonth(dt::TimeType) -> Int64يوم الشهر من Date أو DateTime كـ Int64.
Dates.dayofweekofmonth — Functiondayofweekofmonth(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"))
3Dates.daysofweekinmonth — Functiondaysofweekinmonth(dt::TimeType) -> Intلليوم من الأسبوع لـ dt، ارجع العدد الإجمالي لذلك اليوم من الأسبوع في شهر dt. يعيد 4 أو 5. مفيد في التعبيرات الزمنية لتحديد آخر يوم من الأسبوع في شهر من خلال تضمين dayofweekofmonth(dt) == daysofweekinmonth(dt) في دالة التعديل.
أمثلة
julia> daysofweekinmonth(Date("2005-01-01"))
5
julia> daysofweekinmonth(Date("2005-01-04"))
4Dates.monthname — Functionmonthname(dt::TimeType; locale="العربية") -> String
monthname(month::Integer, locale="العربية") -> StringReturn 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)
"فبراير"Dates.monthabbr — Functionmonthabbr(dt::TimeType; locale="العربية") -> String
monthabbr(month::Integer, locale="العربية") -> StringReturn the abbreviated month name of the Date or DateTime or Integer in the given locale.
أمثلة
julia> monthabbr(Date("2005-01-04"))
"يناير"
julia> monthabbr(2)
"فبراير"Dates.daysinmonth — Functiondaysinmonth(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"))
29Dates.isleapyear — Functionisleapyear(dt::TimeType) -> Boolارجع true إذا كانت سنة dt سنة كبيسة.
أمثلة
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
falseDates.dayofyear — Functiondayofyear(dt::TimeType) -> Intإرجاع يوم السنة لـ dt مع اعتبار 1 يناير هو اليوم 1.
Dates.daysinyear — Functiondaysinyear(dt::TimeType) -> Intارجع 366 إذا كانت سنة dt سنة كبيسة، وإلا ارجع 365.
أمثلة
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366Dates.quarterofyear — Functionquarterofyear(dt::TimeType) -> Intإرجاع الربع الذي يقع فيه dt. نطاق القيم هو 1:4.
Dates.dayofquarter — Functiondayofquarter(dt::TimeType) -> Intإرجاع اليوم من الربع الحالي لـ dt. نطاق القيم هو 1:92.
Adjuster Functions
Base.trunc — Methodtrunc(dt::TimeType, ::Type{Period}) -> TimeTypeيقطع قيمة dt وفقًا لنوع Period المقدم.
أمثلة
julia> trunc(DateTime("1996-01-01T12:30:00"), Day)
1996-01-01T00:00:00Dates.firstdayofweek — Functionfirstdayofweek(dt::TimeType) -> TimeTypeيعدل dt إلى يوم الاثنين من أسبوعه.
أمثلة
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00Dates.lastdayofweek — Functionlastdayofweek(dt::TimeType) -> TimeTypeيعدل dt إلى يوم الأحد من أسبوعه.
أمثلة
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00Dates.firstdayofmonth — Functionfirstdayofmonth(dt::TimeType) -> TimeTypeيعدل dt إلى أول يوم من شهره.
أمثلة
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00Dates.lastdayofmonth — Functionlastdayofmonth(dt::TimeType) -> TimeTypeيعدل dt إلى آخر يوم من شهره.
أمثلة
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00Dates.firstdayofyear — Functionfirstdayofyear(dt::TimeType) -> TimeTypeيعدل dt إلى أول يوم من سنته.
أمثلة
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00Dates.lastdayofyear — Functionlastdayofyear(dt::TimeType) -> TimeTypeيعدل dt إلى آخر يوم في سنته.
أمثلة
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00Dates.firstdayofquarter — Functionfirstdayofquarter(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:00Dates.lastdayofquarter — Functionlastdayofquarter(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:00Dates.tonext — Methodtonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypeيعدل dt إلى اليوم التالي من الأسبوع الذي يتوافق مع dow حيث 1 = الإثنين، 2 = الثلاثاء، إلخ. يسمح تعيين same=true اعتبار dt الحالي كـ dow التالي، مما يسمح بعدم حدوث أي تعديل.
Dates.toprev — Methodtoprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeTypeيعدل dt إلى اليوم السابق من الأسبوع الذي يتوافق مع dow حيث 1 = الإثنين، 2 = الثلاثاء، إلخ. يسمح تعيين same=true اعتبار dt الحالي كـ dow السابق، مما يسمح بعدم حدوث أي تعديل.
Dates.tofirst — Functiontofirst(dt::TimeType, dow::Int; of=Month) -> TimeTypeيعدل dt إلى أول dow من شهره. بدلاً من ذلك، سيعدل of=Year إلى أول dow من السنة.
Dates.tolast — Functiontolast(dt::TimeType, dow::Int; of=Month) -> TimeTypeيعدل dt إلى آخر dow من شهره. بدلاً من ذلك، سيعدل of=Year إلى آخر dow من السنة.
Dates.tonext — Methodtonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeTypeيعدل dt عن طريق التكرار بحد أقصى limit تكرارات بواسطة زيادات step حتى يُرجع func القيمة true. يجب أن تأخذ func وسيطًا واحدًا من نوع TimeType وتُرجع Bool. يسمح same اعتبار dt في تلبية func.
Dates.toprev — Methodtoprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeTypeيعدل dt عن طريق التكرار بحد أقصى limit تكرارات بواسطة زيادات step حتى تعيد func القيمة true. يجب أن تأخذ func وسيطًا واحدًا من نوع TimeType وتعيد Bool. يسمح same اعتبار dt في تلبية func.
Periods
Dates.Period — Methodسنة(v)
ربع(v)
شهر(v)
أسبوع(v)
يوم(v)
ساعة(v)
دقيقة(v)
ثانية(v)
مللي ثانية(v)
ميكرو ثانية(v)
نانوسيكوند(v)قم بإنشاء نوع Period بالقيمة المعطاة v. يجب أن يكون الإدخال قابلاً للتحويل بدون فقدان إلى Int64.
Dates.CompoundPeriod — MethodCompoundPeriod(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 minutesDates.canonicalize — Functioncanonicalize(::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 minutesDates.value — FunctionDates.value(x::Period) -> Int64لإرجاع القيمة المرتبطة بتلك الفترة. على سبيل المثال، value(Millisecond(10)) تُرجع 10 كعدد صحيح.
Dates.default — Functiondefault(p::Period) -> Periodإرجاع قيمة "افتراضية" معقولة لفترة الإدخال عن طريق إرجاع T(1) للسنة والشهر واليوم، و T(0) للساعة والدقيقة والثانية والمللي ثانية.
Dates.periods — FunctionDates.periods(::CompoundPeriod) -> Vector{Period}إرجاع Vector من Periods التي تتكون من CompoundPeriod المعطاة.
تتطلب هذه الدالة Julia 1.7 أو أحدث.
Rounding Functions
يمكن تقليل قيم Date و DateTime إلى دقة محددة (مثل 1 شهر أو 15 دقيقة) باستخدام floor أو ceil أو round.
Base.floor — Methodfloor(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:00Base.ceil — Methodceil(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:00Base.round — Methodround(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).
يمكن أيضًا تقريب معظم قيم Period إلى دقة محددة:
Base.floor — Methodfloor(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 لها أطوال غير متسقة. ```
Base.ceil — Methodceil(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 لها أطوال غير متسقة.
Base.round — Methodround(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 ذات طول غير متسق.
الوظائف التالية غير مصدرة:
Dates.floorceil — Functionfloorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)إرجاع floor و ceil لـ Date أو DateTime في دقة p في نفس الوقت. أكثر كفاءة من استدعاء كل من floor و ceil بشكل فردي.
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)في نفس الوقت، قم بإرجاع floor و ceil لـ Period عند الدقة p. أكثر كفاءة من استدعاء كل من floor و ceil بشكل فردي.
Dates.epochdays2date — Functionepochdays2date(days) -> Dateخذ عدد الأيام منذ بداية العصر (0000-01-01T00:00:00) وأرجع التاريخ المقابل Date.
Dates.epochms2datetime — Functionepochms2datetime(milliseconds) -> DateTimeخذ عدد المللي ثانية منذ بداية العصر (0000-01-01T00:00:00) وأرجع DateTime المقابل.
Dates.date2epochdays — Functiondate2epochdays(dt::Date) -> Int64خذ التاريخ المعطى Date وارجع عدد الأيام منذ بداية العصر (0000-01-01T00:00:00) كـ Int64.
Dates.datetime2epochms — Functiondatetime2epochms(dt::DateTime) -> Int64خذ DateTime المعطاة وارجع عدد المللي ثانية منذ بداية العصر (0000-01-01T00:00:00) كـ Int64.
Conversion Functions
Dates.today — Functiontoday() -> Dateإرجاع جزء التاريخ من now().
Dates.unix2datetime — Functionunix2datetime(x) -> DateTimeخذ عدد الثواني منذ بداية عصر اليونكس 1970-01-01T00:00:00 وحوّله إلى DateTime المقابل.
Dates.datetime2unix — Functiondatetime2unix(dt::DateTime) -> Float64خذ DateTime المعطاة وارجع عدد الثواني منذ بداية عصر اليونكس 1970-01-01T00:00:00 كـ Float64.
Dates.julian2datetime — Functionjulian2datetime(julian_days) -> DateTimeخذ عدد أيام التقويم اليولياني منذ العصر -4713-11-24T12:00:00 وأعد القيمة المقابلة لـ DateTime.
Dates.datetime2julian — Functiondatetime2julian(dt::DateTime) -> Float64خذ DateTime المعطاة وارجع عدد أيام التقويم اليولياني منذ عصر اليوليان -4713-11-24T12:00:00 كـ Float64.
Dates.rata2datetime — Functionrata2datetime(days) -> DateTimeخذ عدد أيام Rata Die منذ بداية العصر 0000-12-31T00:00:00 وأرجع DateTime المقابل.
Dates.datetime2rata — Functiondatetime2rata(dt::TimeType) -> Int64إرجاع عدد أيام راتا دي منذ بداية العصر من Date أو DateTime المعطاة.
Constants
أيام الأسبوع:
| Variable | Abbr. | Value (Int) |
|---|---|---|
Monday | Mon | 1 |
Tuesday | Tue | 2 |
Wednesday | Wed | 3 |
Thursday | Thu | 4 |
Friday | Fri | 5 |
Saturday | Sat | 6 |
Sunday | Sun | 7 |
أشهر السنة:
| Variable | Abbr. | Value (Int) |
|---|---|---|
January | Jan | 1 |
February | Feb | 2 |
March | Mar | 3 |
April | Apr | 4 |
May | May | 5 |
June | Jun | 6 |
July | Jul | 7 |
August | Aug | 8 |
September | Sep | 9 |
October | Oct | 10 |
November | Nov | 11 |
December | Dec | 12 |
Common Date Formatters
Dates.ISODateTimeFormat — ConstantDates.ISODateTimeFormatيصف تنسيق ISO8601 لتاريخ ووقت. هذه هي القيمة الافتراضية لـ Dates.format لـ DateTime.
أمثلة
julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), ISODateTimeFormat)
"2018-08-08T12:00:43.001"Dates.ISODateFormat — ConstantDates.ISODateFormatيصف تنسيق ISO8601 لتاريخ. هذه هي القيمة الافتراضية لـ Dates.format لـ Date.
أمثلة
julia> Dates.format(Date(2018, 8, 8), ISODateFormat)
"2018-08-08"Dates.ISOTimeFormat — ConstantDates.ISOTimeFormatيصف تنسيق ISO8601 للوقت. هذه هي القيمة الافتراضية لـ Dates.format لـ Time.
أمثلة
julia> Dates.format(Time(12, 0, 43, 1), ISOTimeFormat)
"12:00:43.001"Dates.RFC1123Format — ConstantDates.RFC1123Formatيصف تنسيق RFC1123 لتاريخ ووقت.
أمثلة
julia> Dates.format(DateTime(2018, 8, 8, 12, 0, 43, 1), RFC1123Format)
"الأربعاء، 08 أغسطس 2018 12:00:43"- 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
DateandDateTimeare 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.