التوقيت المحلي: كيفية معرفة الوقت الحالي في بيرل

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

عندما تقوم بتشغيل نفس البرنامج النصي على خادم ويب ، فقد تجد أن التوقيت المحلي يوجد خارج التوقيت المحلي على نظام سطح المكتب. قد يكون الخادم في منطقة زمنية مختلفة أو قد يتم تعيينه بشكل غير صحيح. قد يكون لدى كل جهاز فكرة مختلفة تمامًا عن التوقيت المحلي وقد يستغرق الأمر بعض التعديل ، سواء ضمن البرنامج النصي أو على الخادم نفسه ، لجعله يتطابق مع ما تتوقعه.

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

#! / البيرة / المحلية / بن / بيرل
timeData = التوقيت المحلي (الوقت) ؛
print join (''،timeData)؛

يجب أن ترى شيئًا مشابهًا لهذا ، على الرغم من أن الرقم قد يكون مختلفًا تمامًا.

20 36 8 27 11 105 2 360 0

هذه العناصر في الوقت الحالي هي ، بالترتيب:

  • ثانية بعد الدقيقة
  • دقائق الماضية الساعة
  • ساعات بعد منتصف الليل
  • يوم من الشهر
  • الأشهر الماضية بداية العام
  • عدد السنوات منذ عام 1900
  • عدد الأيام منذ بداية الأسبوع (الأحد)
  • عدد الأيام منذ بداية العام
  • سواء ذلك او التوقيت الصيفي نشط

لذلك إذا عدنا إلى المثال وحاولنا قراءته ، سترى أنه الساعة 8:36:20 صباحًا في 27 ديسمبر 2005 ، وهو يومان آخران يوم الأحد (الثلاثاء) ، ويمتد 360 يومًا منذ بداية عام. التوقيت الصيفي غير نشط.

جعل بيرل بالتوقيت المحلي

بعض العناصر في الصفيف التي ترجعها التوقيت المحلي غير ملائمة بعض الشيء للقراءة. من يفكر في السنة الحالية من حيث عدد السنوات الماضية 1900؟ دعنا نلقي نظرة على مثال يجعل تاريخنا ووقتنا أكثر وضوحا.

 #! / البيرة / المحلية / بن / بيرل

 @ أشهر = qw (يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر نوفمبر) ؛

 weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun)؛

 ($ ثاني ، $ دقيقة ، $ ساعة ، $ dayOfMonth ، $ month ، $ yearOffset ، $ dayOfWeek ، $ dayOfYear ، $ daylightSavings) = localtime ()؛

 $ year = 1900 + $ yearOsetset؛

 $ theTime = "$ hour: $ minute: $ second ، $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth، $ year"؛

 طباعة $ theTime ؛ 

عند تشغيل البرنامج ، سترى تاريخًا ووقتًا أكثر قابلية للقراءة مثل هذا:

 9:14:42 ، الأربعاء 28 ديسمبر 2005 

إذن ماذا فعلنا لإنشاء هذا الإصدار الأكثر قابلية للقراءة؟ أولاً ، نعد صفيفين بأسماء أشهر وأيام الأسبوع.

 @ أشهر = qw (يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر نوفمبر) ؛

 weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun)؛ 

نظرًا لأن دالة التوقيت المحلي تُرجع هذه العناصر بقيم تتراوح من 0 إلى 11 ومن 0 إلى 6 على التوالي ، فهي مرشحة مثالية لمجموعة. يمكن استخدام القيمة التي يتم إرجاعها بواسطة التوقيت المحلي كعنوان رقمي للوصول إلى العنصر الصحيح في الصفيف.

 $ أشهر [$ month] $ weekDays [$ dayOfWeek]


والخطوة التالية هي الحصول على جميع القيم من وظيفة التوقيت المحلي. في هذا المثال ، نستخدم اختصار Perl لوضع كل عنصر تلقائيًا في صفيف التوقيت المحلي في المتغير الخاص به. لقد اخترنا أسماء بحيث يكون من السهل تذكر أي عنصر هو الذي.

 ($ ثاني ، $ دقيقة ، $ ساعة ، $ dayOfMonth ، $ month ، $ yearOffset ، $ dayOfWeek ، $ dayOfYear ، $ daylightSavings) = localtime ()؛


نحتاج أيضًا إلى ضبط قيمة السنة. تذكر أن التوقيت المحلي يُرجع عدد السنوات منذ عام 1900 ، لذا من أجل العثور على السنة الحالية ، سنحتاج إلى إضافة 1900 إلى القيمة التي نقدمها.

 $ year = 1900 + $ yearOsetset؛

كيف تتحقق من الوقت الحالي جنرال موتورز في بيرل

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

يحتوي Perl على وظيفة معرفة الوقت ثانية تعمل بنفس الطريقة تمامًا مثل التوقيت المحلي ، ولكن بدلاً من إعادة الوقت المحدد لجهازك وحدة زمنية، يعود توقيت عالمي متناسق (يختصر باسم UTC ، وتسمى أيضًا توقيت غرينتش أو بتوقيت جرينتش). ببساطة يكفي وظيفة تسمى بتوقيت جرينتش.

 #! / البيرة / المحلية / بن / بيرل

 timeData = gmtime (الوقت) ؛

 print join (''،timeData)؛ 

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

 #! / البيرة / المحلية / بن / بيرل

 @ أشهر = qw (يناير فبراير مارس أبريل مايو يونيو يوليو أغسطس سبتمبر أكتوبر نوفمبر نوفمبر) ؛

 weekDays = qw (Sun Mon Tue Wed Thu Fri Sat Sun)؛

 ($ ثاني ، $ دقيقة ، $ ساعة ، $ dayOfMonth ، $ month ، $ yearOffset ، $ dayOfWeek ، $ dayOfYear ، $ daylightSavings) = gmtime ()؛

 $ year = 1900 + $ yearOsetset؛

 $ theGMTime = "$ hour: $ minute: $ second ، $ weekDays [$ dayOfWeek] $ months [$ month] $ dayOfMonth، $ year"؛

 طباعة $ theGMTime ؛ 

  1. سيعود التوقيت المحلي بالتوقيت المحلي الحالي على الجهاز الذي يقوم بتشغيل البرنامج النصي.
  2. سيعود gmtime إلى توقيت غرينتش العالمي ، أو بتوقيت جرينتش (أو UTC).
  3. قد لا تكون قيم الإرجاع هي ما تتوقعه تمامًا ، لذا تأكد من تحويلها حسب الضرورة.