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، كانت السلاسل الفارغة يمكن تمريرها إلى المنشئات و 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
الرقمية، التي تكسر الروابط نحو الرقم الزوجي بشكل افتراضي، تستخدم طريقة TimeType
4d61726b646f776e2e436f64652822222c2022726f756e642229_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
— TypeCompoundPeriod
CompoundPeriod
مفيد للتعبير عن فترات زمنية ليست مضاعفًا ثابتًا لفترات أصغر. على سبيل المثال، "سنة ويوم" ليست عددًا ثابتًا من الأيام، ولكن يمكن التعبير عنها باستخدام 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
— TypeDateTime
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
Dates.Date
— Typeتاريخ
Date
يلتف حول UTInstant{Day}
ويفسره وفقًا للتقويم الغريغوري الاستباقي.
Dates.Time
— Typeالوقت
الوقت
يلتف حول نانosecond
ويمثل لحظة معينة في يوم مدته 24 ساعة.
Dates.TimeZone
— TypeTimeZone
منطقة جغرافية تعتمد بشكل عام على خط الطول لتحديد الوقت في موقع معين. بعض المناطق الزمنية تلاحظ التوقيت الصيفي (مثل EST -> EDT). لمزيد من التنفيذات والدعم، راجع حزمة TimeZones.jl
Dates.UTC
— TypeUTC
UTC
، أو الوقت العالمي المنسق، هو 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:00
Dates.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-02
Dates.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:00
Dates.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.864
Base.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 nanosecond
Accessor 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))
53
Dates.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="العربية") -> 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)
"الخميس"
Dates.dayabbr
— Functiondayabbr(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)
"أربعاء"
Dates.dayofweek
— Functiondayofweek(dt::TimeType) -> Int64
إرجاع يوم الأسبوع كـ Int64
مع 1 = الإثنين، 2 = الثلاثاء، إلخ.
.
أمثلة
julia> dayofweek(Date("2000-01-01"))
6
Dates.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"))
3
Dates.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"))
4
Dates.monthname
— Functionmonthname(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)
"فبراير"
Dates.monthabbr
— Functionmonthabbr(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)
"فبراير"
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"))
29
Dates.isleapyear
— Functionisleapyear(dt::TimeType) -> Bool
ارجع true
إذا كانت سنة dt
سنة كبيسة.
أمثلة
julia> isleapyear(Date("2004"))
true
julia> isleapyear(Date("2005"))
false
Dates.dayofyear
— Functiondayofyear(dt::TimeType) -> Int
إرجاع يوم السنة لـ dt
مع اعتبار 1 يناير هو اليوم 1.
Dates.daysinyear
— Functiondaysinyear(dt::TimeType) -> Int
ارجع 366 إذا كانت سنة dt
سنة كبيسة، وإلا ارجع 365.
أمثلة
julia> daysinyear(1999)
365
julia> daysinyear(2000)
366
Dates.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:00
Dates.firstdayofweek
— Functionfirstdayofweek(dt::TimeType) -> TimeType
يعدل dt
إلى يوم الاثنين من أسبوعه.
أمثلة
julia> firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
Dates.lastdayofweek
— Functionlastdayofweek(dt::TimeType) -> TimeType
يعدل dt
إلى يوم الأحد من أسبوعه.
أمثلة
julia> lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
Dates.firstdayofmonth
— Functionfirstdayofmonth(dt::TimeType) -> TimeType
يعدل dt
إلى أول يوم من شهره.
أمثلة
julia> firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
Dates.lastdayofmonth
— Functionlastdayofmonth(dt::TimeType) -> TimeType
يعدل dt
إلى آخر يوم من شهره.
أمثلة
julia> lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
Dates.firstdayofyear
— Functionfirstdayofyear(dt::TimeType) -> TimeType
يعدل dt
إلى أول يوم من سنته.
أمثلة
julia> firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
Dates.lastdayofyear
— Functionlastdayofyear(dt::TimeType) -> TimeType
يعدل dt
إلى آخر يوم في سنته.
أمثلة
julia> lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
Dates.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:00
Dates.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:00
Dates.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
من Period
s. سيتم جمع جميع Period
s من نفس النوع معًا.
أمثلة
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
Dates.canonicalize
— Functioncanonicalize(::CompoundPeriod) -> CompoundPeriod
يقلل CompoundPeriod
إلى شكله القياسي من خلال تطبيق القواعد التالية:
- أي
Period
كبير بما يكفي ليكون قابلاً للتمثيل جزئيًا بواسطةPeriod
أكثر خشونة سيتم تقسيمه إلى عدةPeriod
s (على سبيل المثال،Hour(30)
تصبحDay(1) + Hour(6)
) - سيتم دمج
Period
s ذات العلامات المعاكسة عند الإمكان (على سبيل المثال،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
Dates.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
من Period
s التي تتكون من 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:00
Base.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:00
Base.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
من Month
s أو Year
s، حيث أن هذه Period
s لها أطوال غير متسقة. ```
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
من Month
s أو Year
s، حيث أن هذه Period
s لها أطوال غير متسقة.
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
من Month
s أو Year
s غير مدعوم، حيث أن هذه Period
s ذات طول غير متسق.
الوظائف التالية غير مصدرة:
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
Date
andDateTime
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.