أجهزة الكمبيوتر شبابيك إنترنت

محول يونكس. وقت عصر يونكس الحالي. كيفية الحصول على وقت Unix

  • التوقيت العالمي: الوقت على خط الزوال الرئيسي يسمى التوقيت العالمي المنسق. كان سبب عدم تطابق الاختصار هو الحاجة إلى عالميته لجميع اللغات.
  • بتوقيت غرينيتش: في السابق ، تم استخدام توقيت غرينتش (GMT) بدلاً من التوقيت العالمي المنسق (UTC) ، حيث تم اختيار خط الزوال الرئيسي للمرور عبر المرصد الملكي في غرينتش.
  • يمكن كتابة المناطق الزمنية الأخرى كإزاحة عن التوقيت العالمي المنسق (UTC). على سبيل المثال ، يتم كتابة التوقيت الشرقي الأسترالي (EST) على أنه UTC + 1000 ، مما يعني أن 10:00 UTC هو 20:00 EST في نفس اليوم.
  • وقت الصيفلا يؤثر على التوقيت العالمي المنسق (UTC). هذا مجرد قرار سياسي لتغيير المنطقة الزمنية (الإزاحة عن التوقيت العالمي المنسق (UTC)). على سبيل المثال ، لا يزال توقيت جرينتش قيد الاستخدام: إنه التوقيت الوطني البريطاني في الشتاء. في الصيف ، يصبح BST.
  • الثواني الكبيسة: وفقًا للاتفاقية الدولية ، يتم الاحتفاظ بالتوقيت العالمي المنسق (UTC) على مسافة لا تزيد عن 0.9 ثانية من الواقع المادي (UT1 ، الذي يُقاس بالتوقيت الشمسي) عن طريق إدخال "الثانية الكبيسة" في نهاية الدقيقة الأخيرة من العام بالتوقيت العالمي المنسق أو الدقيقة الأخيرة من يونيو.
  • لا يلزم الإعلان عن الثواني الكبيسة (من قبل علماء الفلك) قبل أكثر من 6 أشهر من تقديمها. هذه مشكلة إذا كنت بحاجة إلى أي نوع من التخطيط بدقة ثانية واحدة لأكثر من 6 أشهر.
  • وقت يونكس: يُقاس بعدد الثواني منذ "الحقبة" (أوائل عام 1970 بالتوقيت العالمي المنسق). لا يتأثر وقت Unix بالمناطق الزمنية أو التوقيت الصيفي.
  • وفقًا لمعيار POSIX.1 ، من المفترض أن يتعامل وقت Unix مع الثواني الكبيسة بتكرار الثانية السابقة ، على سبيل المثال: 59.00 59.25 59.50 59.75 59.00 ← كرر 59.25 59.50 59.75 00.00 ← الزيادة 00.25 هذه مقايضة: لا يمكنك التعبير عن أي الثانية الكبيسة في ساعة النظام لديك ووقتك مضمون للعودة إلى الوراء. من ناحية أخرى ، يبلغ طول كل يوم 86400 ثانية بالضبط ، ولا تحتاج إلى جدول بكل الثواني الكبيسة الماضية والمستقبلية لتحويل وقت Unix إلى ساعات - دقائق - ثانية يمكن قراءتها.
  • من المفترض أن ntpd سيعيد المحاولة بعد تلقي بتات قفزة من خوادم وقت المنبع ، لكنني رأيت أيضًا أنه لا يفعل شيئًا: ينتقل النظام ثانية واحدة إلى المستقبل ، ثم يتسلل ببطء إلى الوقت الصحيح.

ما يجب أن يعرفه كل مبرمج عن الوقت

  • تشير المناطق الزمنية إلى مستوى العرض
    لا ينبغي أن تتعامل معظم التعليمات البرمجية الخاصة بك مع المناطق الزمنية أو التوقيت المحلي ، بل يجب أن تمرر وقت Unix كما هو.
  • عند قياس الوقت ، قم بقياس وقت Unix. هذا هو التوقيت العالمي المنسق. من السهل الحصول عليها (حسب وظائف النظام). ليس لديها مناطق زمنية أو التوقيت الصيفي (والثواني الكبيسة).
  • عندما تقوم بتخزين الوقت ، قم بتخزين وقت Unix. هذا رقم واحد.
  • إذا كنت تريد الاحتفاظ بالوقت الذي يمكن للبشر قراءته (على سبيل المثال ، في السجلات) ، فحاول الاحتفاظ به سويامع وقت يونكس ، لا بدلا من.
  • عند عرض الوقت ، قم دائمًا بتضمين إزاحة المنطقة الزمنية. تنسيق الوقت بدون الإزاحة عديم الفائدة.
  • ساعة النظام ليست دقيقة.
  • أنت متصل؟ ساعة نظام كل آلة أخرى ليست دقيقة بطريقة مختلفة.
  • يمكن لساعة النظام أن تقفز ذهابًا وإيابًا في الوقت المناسب وستقوم بذلك بسبب أشياء خارجة عن إرادتك. يجب أن يكون برنامجك مصممًا للبقاء على قيد الحياة.
  • نسبة عدد الثواني ساعة النظامللكمية حقيقةالثواني ليست دقيقة وقد تختلف. يعتمد بشكل أساسي على درجة الحرارة.
  • لا تستخدم بشكل أعمى gettimeofday (). إذا كنت تريد ساعة رتيبة (متزايدة باستمرار) ، ألق نظرة على clock_gettime (). [خيار Java: استخدم System.nanoTime () بدلاً من System.currentTimeMillis ()]
  • يمكن لـ ntpd تغيير وقت النظام بطريقتين:
    • الخطوة: تقفز الساعة للأمام أو للخلف إلى الوقت الصحيح فورًا
    • كرنك: قم بتغيير تردد ساعة النظام بحيث تتحرك ببطء نحو الوقت الصحيح.
    يُفضل الالتواء لأنه أقل ضررًا ، ولكنه مفيد فقط لتصحيح الاختلافات الصغيرة.

حالات خاصة

  • يمر الوقت بمعدل ثانية واحدة في الثانية لجميع المراقبين. يعتمد تواتر الساعات البعيدة بالنسبة للمراقب على السرعة والجاذبية. يتم ضبط الساعات داخل أقمار GPS الصناعية للتغلب على تأثيرات النسبية.
  • تقوم MySQL بتخزين أعمدة DATETIME كقيم معبأة بالأرقام "YYYYMMDD HHMMSS" إذا كنت مهتمًا بتخزين الطوابع الزمنية ، فقم بتخزينها كعدد صحيح واستخدم وظائف UNIX_TIMESTAMP () و FROM_UNIXTIME () للتحويل.

لأن لا توجد أدوات مدمجة في وقود الديزل ، نقوم بإنشاء البرنامج النصي التالي: #! / bin / sh truss date 2> & 1 | grep ^ time | awk "(print $ 3؛)" exit $؟ أو nawk "BEGIN (print srand ())" أو على perl: perl -e "print time،" \ n "؛" تعرف على تاريخ تعديل الملف: truss -v lstat -t lstat ls -l file.txt 2> & 1 1> / dev / null | grep "mt \ = \" | awk "(طباعة 9 دولارات أمريكية ؛)"

كيفية الحصول على وقت Unix في ...

بيرل زمن
بي أتش بي زمن ()
روبي Time.now (أو Time.new). للإخراج: Time.now.to_i
بايثون وقت الاستيراد أولاً ، ثم time.time ()
جافا فترة طويلة = System.currentTimeMillis () / 1000 ؛
Microsoft .NET C # العصر = (DateTime.Now.ToUniversalTime (). القراد - 621355968000000000) / 10000000 ؛
VBScript / ASP DateDiff ("s"، "01/01/1970 00:00:00" ، الآن ())
إرلانج التقويم: datetime_to_gregorian_seconds (التقويم: now_to_universal_time (الآن ())) - 719528 * 24 * 3600.
MySQL حدد unix_timestamp (الآن ())
PostgreSQL حدد استخراج (عصر من الآن ()) ؛
خادم قاعدة البيانات SELECT DATEDIFF (s، "1970-01-01 00:00:00"، GETUTCDATE ())
جافا سكريبت Math.round (new Date (). GetTime () / 1000.0) ترجع getTime () الوقت بالمللي ثانية.
يونكس / لينكس التاريخ +٪ s
أنظمة تشغيل أخرى سطر الأوامر: perl -e "وقت الطباعة" (إذا تم تثبيت Perl على نظامك)

جاري تحويل التاريخ إلى وقت Unix إلى ...
بي أتش بي mktime ( راقب, الدقائق, ثواني, شهر, يوم, عام)
روبي Time.local ( عام, شهر, يوم, راقب, الدقائق, ثواني, usec) (أو Time.gm لإخراج GMT / UTC). لعرض إضافة .to_i
بايثون وقت الاستيراد أولاً ، ثم int (time.mktime (time.strptime ("2000-01-01 12:34:00"، "٪ Y-٪ m-٪ d٪ H:٪ M:٪ S")))
جافا long epoch = new java.text.SimpleDateFormat ("dd / MM / yyyy HH: mm: ss"). parse ("01/01/1970 01:00:00") ؛
VBScript / ASP DateDiff ("s"، "01/01/1970 00:00:00"، حقل التاريخ)
MySQL حدد unix_timestamp ( زمن) تنسيق الوقت: YYYY-MM-DD HH: MM: SS أو YYMMDD أو YYYYMMDD
PostgreSQL حدد استخراج (حقبة من التاريخ ("2000-01-01 12:34")) ؛
مع الطابع الزمني: حدد المستخرج (EPOCH من TIMESTAMP مع المنطقة الزمنية "2001-02-16 20: 38: 40-08") ؛ مع فاصل زمني: حدد استخراج (إيبوك من فاصل "5 أيام 3 ساعات") ؛
خادم قاعدة البيانات حدد DATEDIFF (s، "1970-01-01 00:00:00"، حقل التاريخ)
يونكس / لينكس التاريخ +٪ s -d "1 يناير 1980 00:00:01"

تحويل وقت Unix إلى تاريخ يمكن قراءته بواسطة الإنسان ...
بي أتش بي تاريخ ( صيغة, وقت يونيكس);
روبي Time.at ( وقت يونيكس)
بايثون وقت الاستيراد أولاً ، ثم time.strftime ("٪ a ،٪ d٪ b٪ Y٪ H:٪ M:٪ S +0000" ، time.localtime ( وقت يونيكس)) استبدل time.localtime بـ time.gmtime لتاريخ GMT.
جافا String date = new java.text.SimpleDateFormat ("dd / MM / yyyy HH: mm: ss"). التنسيق (new java.util.Date ( وقت يونيكس*1000));
VBScript / ASP DateAdd ("s"، وقت يونيكس, "01/01/1970 00:00:00")
PostgreSQL حدد الطابع الزمني مع المنطقة الزمنية "حقبة" + وقت يونيكس* فاصل زمني "1 ثانية" ؛
MySQL from_unixtime ( وقت يونيكس, اختياري ، تنسيق الإخراج) تنسيق الإخراج القياسي YYY-MM-DD HH: MM: SS
خادم قاعدة البيانات DATEADD (s ، وقت يونيكس, "1970-01-01 00:00:00")
مايكروسوفت اكسل = (A1 / 86400) + 25569 ستكون النتيجة بتوقيت GMT. بالنسبة للمناطق الزمنية الأخرى: = ((A1 +/- فارق التوقيت للمنطقة) / 86400) + 25569.
لينكس التاريخ - د @ 1190000000
أنظمة تشغيل أخرى سطر الأوامر: perl -e print scalar (localtime ( وقت يونيكس)) "(إذا تم تثبيت Perl) استبدل" localtime "بـ" gmtime "للمنطقة الزمنية GMT / UTC.

ما هو وقت Unix أو عصر Unix (عصر Unix أو وقت Unix أو وقت POSIX أو طابع زمني Unix)؟

UNIX-time أو POSIX-time (English Unix time) - طريقة لترميز الوقت ، مقبولة في UNIX وأنظمة التشغيل الأخرى المتوافقة مع POSIX.
تعتبر بداية العد التنازلي منتصف الليل (UTC) من 31 ديسمبر 1969 إلى 1 يناير 1970 ، ويسمى الوقت من تلك اللحظة "عصر UNIX" (حقبة يونكس الإنجليزية).
يتوافق وقت UNIX مع التوقيت العالمي المنسق (UTC) ، على وجه الخصوص ، عندما يتم الإعلان عن الثواني الكبيسة بالتوقيت العالمي المنسق (UTC) ، يتم تكرار الأرقام الثانية المقابلة.
تعد طريقة تخزين الوقت على شكل عدد من الثواني ملائمة جدًا للاستخدام عند مقارنة التواريخ (الدقيقة بالثانية) ، وكذلك لتخزين التواريخ: إذا لزم الأمر ، يمكن تحويلها إلى أي تنسيق يمكن قراءته. يشغل التاريخ والوقت بهذا التنسيق أيضًا مساحة صغيرة جدًا (4 أو 8 بايت ، اعتمادًا على حجم كلمة الآلة) ، لذلك من المعقول استخدامه لتخزين كميات كبيرة من التواريخ. يمكن أن تحدث عيوب في الأداء إذا قمت بالوصول إلى عناصر التاريخ في كثير من الأحيان ، مثل رقم الشهر ، وما إلى ذلك. ولكن في معظم الحالات ، يكون تخزين الوقت كقيمة واحدة أكثر فعالية من تخزين الوقت كقيمة واحدة بدلاً من مجموعة من الحقول.

تحويل عصر Unix إلى تاريخ يمكن للبشر قراءته


تاريخ بداية ونهاية يونكس للسنة أو الشهر أو اليوم


تحويل الثواني إلى أيام وساعات ودقائق


كيفية الحصول على وقت Unix في ...

بيرلزمن
بي أتش بيزمن ()
روبيTime.now (أو Time.new). للإخراج: Time.now.to_i
بايثونوقت الاستيراد أولاً ، ثم time.time ()
جافافترة طويلة = System.currentTimeMillis () / 1000 ؛
Microsoft .NET C #العصر = (DateTime.Now.ToUniversalTime (). القراد - 621355968000000000) / 10000000 ؛
VBScript / ASPDateDiff ("s"، "01/01/1970 00:00:00" ، الآن ())
إرلانجالتقويم: datetime_to_gregorian_seconds (التقويم: now_to_universal_time (الآن ())) - 719528 * 24 * 3600.
MySQLحدد unix_timestamp (الآن ())
PostgreSQLحدد استخراج (عصر من الآن ()) ؛
خادم قاعدة البياناتSELECT DATEDIFF (s، "1970-01-01 00:00:00"، GETUTCDATE ())
جافا سكريبتMath.round (new Date (). GetTime () / 1000.0) ترجع getTime () الوقت بالمللي ثانية.
يونكس / لينكسالتاريخ +٪ s
أنظمة تشغيل أخرىسطر الأوامر: perl -e "وقت الطباعة" (إذا تم تثبيت Perl على نظامك)

جاري تحويل التاريخ إلى وقت Unix إلى ...

بي أتش بيmktime ( راقب, الدقائق, ثواني, شهر, يوم, عام)
روبيTime.local ( عام, شهر, يوم, راقب, الدقائق, ثواني, usec) (أو Time.gm لإخراج GMT / UTC). لعرض إضافة .to_i
بايثونوقت الاستيراد أولاً ، ثم int (time.mktime (time.strptime ("2000-01-01 12:34:00"، "٪ Y-٪ m-٪ d٪ H:٪ M:٪ S")))
جافاlong epoch = new java.text.SimpleDateFormat ("dd / MM / yyyy HH: mm: ss"). parse ("01/01/1970 01:00:00") ؛
VBScript / ASPDateDiff ("s"، "01/01/1970 00:00:00"، حقل التاريخ)
MySQLحدد unix_timestamp ( زمن) تنسيق الوقت: YYYY-MM-DD HH: MM: SS أو YYMMDD أو YYYYMMDD
PostgreSQLحدد استخراج (حقبة من التاريخ ("2000-01-01 12:34")) ؛
مع الطابع الزمني: حدد المستخرج (EPOCH من TIMESTAMP مع المنطقة الزمنية "2001-02-16 20: 38: 40-08") ؛ مع فاصل زمني: حدد استخراج (إيبوك من فاصل "5 أيام 3 ساعات") ؛
خادم قاعدة البياناتحدد DATEDIFF (s، "1970-01-01 00:00:00"، حقل التاريخ)
يونكس / لينكسالتاريخ +٪ s -d "1 يناير 1980 00:00:01"

تحويل وقت Unix إلى تاريخ يمكن قراءته بواسطة الإنسان ...

بي أتش بيتاريخ ( صيغة, وقت يونيكس);
روبيTime.at ( وقت يونيكس)
بايثونوقت الاستيراد أولاً ، ثم time.strftime ("٪ a ،٪ d٪ b٪ Y٪ H:٪ M:٪ S +0000" ، time.localtime ( وقت يونيكس)) استبدل time.localtime بـ time.gmtime لتاريخ GMT.
جافاString date = new java.text.SimpleDateFormat ("dd / MM / yyyy HH: mm: ss"). التنسيق (new java.util.Date ( وقت يونيكس*1000));
VBScript / ASPDateAdd ("s"، وقت يونيكس, "01/01/1970 00:00:00")
PostgreSQLحدد الطابع الزمني مع المنطقة الزمنية "حقبة" + وقت يونيكس* فاصل زمني "1 ثانية" ؛
MySQLfrom_unixtime ( وقت يونيكس, اختياري ، تنسيق الإخراج) تنسيق الإخراج القياسي YYY-MM-DD HH: MM: SS
خادم قاعدة البياناتDATEADD (s ، وقت يونيكس, "1970-01-01 00:00:00")
مايكروسوفت اكسل= (A1 / 86400) + 25569 ستكون النتيجة بتوقيت GMT. بالنسبة للمناطق الزمنية الأخرى: = ((A1 +/- فارق التوقيت للمنطقة) / 86400) + 25569.
لينكسالتاريخ - د @ 1190000000
أنظمة تشغيل أخرىسطر الأوامر: perl -e print scalar (localtime ( وقت يونيكس)) "(إذا تم تثبيت Perl) استبدل" localtime "بـ" gmtime "للمنطقة الزمنية GMT / UTC.

ما هي أداة "محول Unixtime"؟

هذه الأداة ، أولاً وقبل كل شيء ، ستكون مفيدة لمشرفي المواقع الذين يتعاملون باستمرار مع كميات كبيرة من التواريخ أو غالبًا ما يشيرون إلى عناصرهم في عملهم. باستخدام أداة "Unixtime Converter" ، يمكنك بسهولة تحويل وقت Unix إلى تاريخ سهل الاستخدام (والعكس صحيح) ، ومعرفة وقت عصر Unix الحالي ، والحصول على وقت Unix في لغات مختلفةالبرمجة و DBMS وأنظمة التشغيل.

ما هو Unix Time؟

بدأ عصر يونكس (عصر يونكس) ليلة 31 ديسمبر 1969 إلى 1 يناير 1970. كان هذا التاريخ هو الذي اتخذ كنقطة انطلاق لوقت "الكمبيوتر" ، والذي يتم حسابه بالثواني ويستهلك مساحة صغيرة جدًا على القرص - فقط 4 أو 8 بايت. باستخدام طريقة الترميز هذه ، يمكن للمبرمجين "إخفاء" أي تاريخ برقم واحد ، وتحويله بسهولة مرة أخرى إلى تنسيق يمكن للمستخدمين فهمه.

يعد وقت Unix (يُسمى أيضًا وقت Unix أو وقت POSIX) مناسبًا للاستخدام في أنظمة تشغيل ولغات برمجة مختلفة ، حيث يتم عرضه كقيمة واحدة ، وليس عددًا معينًا من الحقول التي تشغل مساحة. بالإضافة إلى ذلك ، يتوافق وقت UNIX تمامًا مع معيار UTC (بما في ذلك السنوات الكبيسة) - في هذه الحالة ، يتم ببساطة تكرار القيم المقابلة للثواني.

مصطلحات يونكس

بضع كلمات عن الشروط.

وبالتالي، وقت يونكس(أو وقت POSIX) هو عدد الثواني المنقضية منذ منتصف الليل ، 1 كانون الثاني (يناير) 1970 ، حتى الوقت الحاضر.

طابع زمني يونكس(الطابع الزمني) هو وقت "ثابت" ، بمعنى آخر ، تاريخ محدد مختوم برقم.

التوقيت العالمي(التوقيت العالمي المنسق) هو التوقيت العالمي المنسق ، وهو "ثابت" عند خط الزوال الرئيسي ، ومنه يتم حساب المناطق الزمنية الجغرافية.

ما مدى "ديمومة" النظام؟

في غضون عقدين فقط ، وبالتحديد في 19 يناير 2038 الساعة 03:14:08 بالتوقيت العالمي المنسق ، سيصل وقت Unix إلى القيمة 2147483648 ، ويمكن لأنظمة الكمبيوتر تفسير هذا الرقم على أنه رقم سلبي. يكمن مفتاح حل هذه المشكلة في استخدام متغير 64 بت (بدلاً من 32 بت) لتخزين الوقت. في هذه الحالة ، سيكون رصيد القيم العددية لوقت يونكس كافياً للبشرية لمدة 292 مليار سنة أخرى. ليس سيئا ، أليس كذلك؟

وقت Unix هو واحد للجميع

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

هذه الأداة ضرورية لتحويل تاريخ من تنسيق Unix TimeStamp إلى تاريخ يمكن قراءته من قبل الإنسان والعكس صحيح.

ما هو وقت Unix ولماذا يتم استخدامه؟لفهم سبب استخدام هذا ، سأبدأ به المفهوم العامما هو بالضبط وقت يونكس.

وقت يونكس (أو الطابع الزمني ، الذي يُترجم إلى اللغة الروسية يعني "الطابع الزمني" وله نفس المعنى)هو عدد الثواني منذ 1 يناير 1970. أي أن طابع Unix الزمني في 01/01/1970 00:00:00 كان يساوي 0. بعد دقيقتين (120 ثانية) ، كان وقت Unix يساوي 120. على سبيل المثال ، بعد أيام (01/02/1970) 00:00:00) كان وقت Unix يساوي 86400 ، حيث مرت 60 * 60 * 24 = 86400 ثانية. الآن طابع Unix Time Stamp هو بالفعل 1566148027 والرقم يتزايد باستمرار ، حيث أن الثواني تدق باستمرار.

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

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

مشكلة عام 2038

كما قلت ، الرقم طابع زمني يونكسكل ثانية تصبح أكثر بمقدار 1. عاجلاً أم آجلاً ، يجب أن يأتي حد هذا الرقم وسيكون فقط في عام 2038. الشيء هو أن الحد الأقصى لعدد أنظمة التشغيل 32 بت المنتشرة في بداية القرن الحادي والعشرين هو 2 31. هذا هو الرقم الذي سيصل إليه طابع Unix TimeStamp في عام 2038.

→ تم العثور بالفعل على حل لهذه المشكلة. للتأكد من أن المواقع في عام 2038 لا تتوقف عن حساب الوقت بشكل صحيح ، يكفي استخدام 64 بت نظام التشغيلعلى خادم استضافة / VDS / مخصص ، وليس 32 بت. مع تزايد القدرات النشطة لأجهزة الكمبيوتر وانخفاض تكلفتها ، يذهب كل شيء إلى حقيقة أنه بحلول عام 2038 سيتم توفير الغالبية العظمى من الخدمات في مجال توفير مساحة للموقع على أساس نظام تشغيل 64 بت. بالمناسبة ، في نظام 64 بت ، لن تؤثر علينا مثل هذه المشكلة لمدة 292 مليار سنة على الأقل ، وهو ما يكفي للحساب مشكلة عام 2038تم حلها.

فقط لقراء Lifeexample ، من الممكن فتح متجر على الإنترنت على Moguta.CMS بخصم 15٪

Unix Time and Unix Timestamp (MySQL ، PHP ، JavaScript)

مرحباً أعزائي قراء المدونة ، في هذا المقال ، أريد أن أخبركم بما هو وقت يونكسو طابع زمني يونكس... غالبًا ما يجمع المبرمجون هذه المفاهيم في مفهوم واحد ، لكن هذا ليس صحيحًا تمامًا. بالإضافة إلى ذلك ، تحتوي المقالة على العديد من الملاحظات المفيدة حول موضوع العمل مع Unix Timestamp في PHP و MySQL و JavaScript.

لماذا يبدأ Unix Time في 1 يناير 1970

الشيء هو أن وقت Unix يبدأ في احتساب عصر Unix ، بإصدار الأول أنظمة UNIX... تم إنشاء النظام الأول من هذا النوع في عام 1969 ، لذلك أخذ المطورون التاريخ من 1 يناير 1970 في منتصف الليل بالتوقيت العالمي المنسق ( التوقيت العالمي).

دعونا نفهم الغرض من وقت Unix والطابع الزمني لـ Unix ، ونمنحهم مفاهيم واضحة.

طابع زمني يونكسهو طابع زمني عبارة عن سلسلة من الأحرف تمثل عدد الثواني التي مرت منذ 1 يناير 1970.

سأحاول إعطاء مثال لتوضيح الفرق بين هذين المفهومين.

في وقت كتابة هذا المنشور ، وقت يونكسكانت متساوية 1346765877 .

في وقت قراءتك ، لهذه المعلومات ، سجل للوقت ( 1346765877 ) هو بالفعل تسمية - طابع زمني يونكس! بتحويل هذا الطابع الزمني إلى نموذج قابل للقراءة ، نحصل على التاريخ 04-09-2012 والوقت 17:37:57.

بصراحة ، لا يوجد معنى خاص في فصل المفهومين ، في رأيي ، لكن لا يزال من المفيد أن يكون لديك فكرة عما يشكل توقيت يونكسومن المفيد أيضًا أن نفهم أن الحد الأقصى لعدد الثواني الممكنة منذ عام 1970 له حد!

ستأتي نهاية عصر Unix في عام 2038

حقيقة:أقصى عدد ثنائيعلى أنظمة 32 بت هو الرقم 01111111 11111111 11111111 11111111 بتحويله إلى النظام العشري ، نحصل على الرقم 2147483647.

19 يناير 2038الساعة 03:14:08 ستأتي اللحظة التي يتجاوز فيها عدد الثواني التي مرت منذ بداية عصر يونكس الحد الأقصى المتاح في نظام 32 بت ، الرقم = 2147483647. إذا تجاوز البت ، فسيكون التاريخ إعادة تعيين.

من السهل جدًا اختبار هذه النظرية بمثال توضيحي:

  • افتح حاسبة Windows القياسية ، اضغط على ALT + 3 ، سيؤدي ذلك إلى تحويلها إلى العرض الهندسي ؛
  • تعيين وضع 4 بايت ونوع الإدخال العشري ؛
  • اكتب الرقم 2147483647 ؛

  • لاحظ التمثيل الثنائي للرقم ؛
  • أضف واحدًا إلى الرقم ؛

  • سوف ينتج عن الإضافة رقم سلبي!

إذا واصلنا إضافة واحد ، فسنحصل على إغلاق دوري.

سيحدث هذا النوع من رنين التاريخ اعتبارًا من 19 يناير 2038 على جميع الأنظمة التي تستخدم بنية 32 بت.

في الواقع ، لا داعي للحزن ، لأن مطوري أنظمة الحوسبة يقدمون بشكل متزايد معماريات 64 بت للاستخدام على نطاق واسع. دعونا نعتقد أنها ستكون في الوقت المناسب بحلول عام 2038.

الآن دعنا نتحدث عن استخدام طابع زمني unix في بي أتش بي, mysqlوحتى في جافا سكريبت.

العمل مع طابع زمني يونكس

من النقاط المهمة جدًا عند العمل باستخدام طابع زمني unix في php أو mysql هو الحاجة إلى فهم إيجابيات وسلبيات تنسيق التاريخ هذا بوضوح.

على سبيل المثال، الطابع الزمنيلا يمكن استخدامها لتحديد الأحداث أو الأحداث التاريخية في المستقبل البعيد. المجموعة الكاملة من التواريخ محدودة بالفترة من 1970 إلى أوائل 2038. إذا قمت بتعيين تاريخ بعد 2038 ، فلن يتم تفسيره بشكل صحيح بواسطة نظام 32 بت.

وإدراكًا لهذا القيد ، يطرح سؤال منطقي: " لماذا تهتم بتمثيل التاريخ بالثواني؟"

متى تستخدم الطابع الزمني لـ Unix

لتمثيل الوقت في نظامنا المعتاد للقياس ، يلزم 8 بايت ، وبالنسبة للطابع الزمني unix يكون نصف الوقت - 4 بايت.

إن حفظ كمية البيانات ، في رأيي ، هو الإضافة الرئيسية التي لا جدال فيها في استخدام Unix Time.

بالإضافة إلى ذلك ، هناك عدد من الفروق الدقيقة المفيدة المتاحة عند العمل معها طابع زمني UNIX في mysql... ونظرًا لأنه يجب تخزين جميع المعلومات على خادم قاعدة البيانات ، وله بدوره عدد من المزايا عند العمل مع الطوابع الزمنية لـ Unix ، يمكن تبرير الاختيار نحو طابع زمني unix بشكل صحيح من خلال الأحكام التالية.

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

لتعزيز الكلمة بالأفعال ، قمنا بتعيين المهمة التالية: عند تسجيل مستخدم جديد في النظام ، تحتاج إلى إدخال تاريخ إضافته إلى قاعدة البيانات.

إذا كان نوع الحقل الذي يخزن التاريخ في الجدول هو التاريخ، ثم طلب من نص PHPسيبدو مثل هذا:

الفوائد واضحة!

هناك أيضا ناقص: في حالة وجود عدة حقول TIMESTAMP ، يتم تحديث الحقل الأول فقط تلقائيًا.

هل يعقل استخدام INT بدلاً من الطابع الزمني

يستخدم العديد من المبرمجين ، عند العمل باستخدام طابع زمني يونكس ، تنسيق العدد الصحيح int (11). هذا نهج غير معقول تمامًا للسؤال ، حيث توفر MySQL العديد من الوظائف المفيدة لنوع الطابع الزمني الذي يؤثر على سرعة العمل به. لذلك ، من خلال تخزين الطابع الزمني في INT ، فإننا نحرم أنفسنا من كل دعم الخادم لهذا التنسيق. هذا هو نفس تخزين المعرف في نوع varchar (11).

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

وصف موجز لأنواع تقويم MySQL

الطابع الزمني- نوع البيانات لتخزين التاريخ والوقت. يتم تخزين البيانات على أنها عدد الثواني منذ بداية "عصر Unix". نطاق القيم هو 1970-01-01 00:00:00 - 2038-12-31 00:00:00. يستغرق 4 بايت.

تاريخ- نوع البيانات لتخزين التاريخ. نطاق القيم هو 1000-01-01 حتى 9999-12-31. يستغرق 3 بايت.

التاريخ- نوع البيانات لتخزين التاريخ والوقت. نطاق القيم هو 1000-01-01 00:00:00 - 9999-12-31 00:00:00. يستغرق 8 بايت ويتم تخزينه كرقم YYYYMMDDHHMMSS./p>

عام- نوع البيانات لتخزين السنة. نطاق القيم: 1901 - 2155. يحتل 1 بايت.

زمن- نوع البيانات لتخزين الوقت. النطاق −828: 59: 59 - 828: 59: 59. يستغرق 3 بايت.

ترجمة التاريخ في يونكس

حان الوقت لوضع بعض الوظائف المفيدة لترجمة التاريخ إلى طابع زمني يونيكسوالعودة من يونيكس الوقتفي تاريخ مقروء.

كيفية الحصول على وقت UNIX الحالي

  • بي أتش بي:

    زمن ()؛

  • جافا سكريبت:

    Math.round (new Date () .getTime () / 1000.0) ؛

  • MySQL:

    حدد unix_timestamp (now ()) ؛