سؤال كيفية الحصول على وقت Unix الحالي بالمللي ثانية في bash؟


كيف يمكنني الحصول على وقت Unix الحالي بالمللي ثانية (أي عدد المللي ثانية منذ Unix epoch January 1 1970)؟


197
2018-06-14 16:04


الأصل




الأجوبة:


هذه:

date +%s 

سيعود عدد ثواني منذ الحقبة

هذه:

date +%s%N

يعيد ثواني و nanoseconds الحالي.

وبالتالي:

date +%s%N | cut -b1-13

سوف يعطيك عدد المللي ثانية منذ الحقبة - الثواني الحالية بالإضافة إلى الثلاثة اليسرى من النانوسيكند.


و من MikeyB - echo $(($(date +%s%N)/1000000)) (القسمة على 1000 تجلب فقط إلى microseconds)


234
2018-06-14 16:10



أتساءل كم عدد ms يضيف القطع :-) - Kyle Brandt♦
أو إذا كنت تريد أن تفعل كل شيء في القشرة ، وتجنب النفقات الزائدة لعملية إضافية (في الواقع ، نحن نتجنب المشكلة عندما يتغير عدد الأرقام في٪ + s + N): echo $(($(date +%s%N)/1000)) - MikeyB
إنه مبدأ المسألة ... تجنب الأرقام السحرية ورمز ما أنت عليه في الواقع تعني. - MikeyB
أعتقد أنه من الجدير بالذكر أن الرجل طلب يونكس وليس لينكس ، والإجابة الأعلى الحالية (التاريخ +٪ s٪ N) لا تعمل على نظام AIX الخاص بي. - Pete
Pete +1 Same لـ OS X و FreeBSD - ocodo


يمكنك ببساطة استخدام %3N لاقتطاع النانو ثانية إلى الأرقام الثلاثة الأكثر أهمية (التي تكون بعد ذلك مليثانية):

$ date +%s%3N
1397392146866

هذا يعمل على سبيل المثال على بلدي kubuntu 12.04.

ولكن كن على علم بذلك %N قد لا يتم تنفيذه وفقًا لنظامك المستهدف. مثلا اختبار على نظام مضمن (جذر rootfs ، تم تجميعها باستخدام toolchain عبر الذراع HF) لم يكن هناك %N:

$ date +%s%3N
1397392146%3N

(وأيضا بلدي اللوحي (غير الجذور) الروبوت لا يوجد لديه %N).


80
2018-04-13 12:34



warren: رأيت أنك قمت بتحرير وتغيير 1397392146%3N إلى 1397392146%N، ولكن الناتج من 1397392146%3N هو ما رأيته حقًا على وحدة التحكم في busybox من جهاز android اللوحي. هل يمكن أن تفسر تعديلك؟ - Joe
تم تغيير تعليق وارن من التاريخ من 3 إلى 6 ، حيث أن 3 فقط يأخذك إلى ميكروثانية. تعديله يبدو كاذبًا تمامًا ؛ يجب عليك إرجاعها. - bukzor
هذه هي ميزة من غنو coreutils على وجه التحديد. في نهاية المطاف ، يتم تنفيذ ذلك في gnulib هنا: github.com/gagern/gnulib/blob/.... - telotortium
ربما نقطة في هناك منطقية. date +%s.%3N مطبوعات 1510718281.134. - darksky


date +%N لا يعمل على OS X ، ولكن يمكنك استخدام واحدة من

  • روبي: ruby -e 'puts Time.now.to_f'
  • الثعبان: python -c 'import time; print time.time()'
  • نود.جي إس: node -e 'console.log(Date.now())'
  • PHP: php -r 'echo microtime(TRUE);'
  • الداخلية: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
  • أو للمللي ثانية تقريبًا إلى أقرب ثانية date +%s000

51
2017-09-02 11:16



للأكتمال... node -e 'console.log(Date.now())' - slf
باستخدام PHP: php -r 'echo microtime(TRUE);' - TachyonVortex
بالتأكيد ، عليك فقط أن تنتظر هؤلاء المترجمين لتدفئتهم. هذا يعمل أيضا: wget -qO- http://www.timeapi.org/utc/now?\\s.\\N - Camilo Martin
أو إذا كنت لا تحتاج في الواقع للمللي ثانية لكن فقط التنسيق الصحيح: date +%s000 - Lenar Hoyt
apple.stackexchange.com/questions/135742/... لديه تعليمات للقيام بذلك في OSX عبر المشروب coreutils - sameers


فقط رمي هذا هناك ، ولكن أعتقد أن الصيغة الصحيحة مع التقسيم ستكون:

echo $(($(date +%s%N)/1000000))

8
2017-09-07 21:22





حلّي ليس الأفضل بل عملت لي.

date +%s000

أنا فقط بحاجة إلى تحويل تاريخ مثل 2012-05-05 إلى ميلي ثانية.


6
2018-05-09 20:11



اختراق مذهل ، لول :) - k06a
يجب أن تكون شخصًا بين زملائي في العمل. - Nakilon


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

wget -qO- http://www.timeapi.org/utc/now?\\s.\\N

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


6
2018-06-23 13:17



أنت لا تطلب النظام المحلي في ذلك الوقت. وهو ما أعتقد أنه ضمني في السؤال. أنت تعتمد أيضا على اتصال الشبكة. - orkoden
orkoden يسأل السؤال بشكل صريح عن "عدد المللي ثانية منذ تاريخ يونكس 1 يناير 1970". أيضا ، أنا أكثر من الإشارة إلى كيف لا ينبغي أبدا إطلاق كامل من روبي أو بايثون (أو wget) فقط للحصول على الوقت - إما أن يتم ذلك من خلال قناة سريعة أو ميلي ثانية لا يهم. - Camilo Martin
نعم ، فهمت أنك كنت تعطي حلاً أسوأ لتسليط الضوء على عيوب الحلول السيئة. حاولت عدة حلول وقاس الزمن. lpaste.net/119499 النتائج هي مثيرة للاهتمام. حتى على جهاز I7 سريع جدا date يأخذ 3 مللي ثانية للتشغيل. - orkoden
orkoden اختبار لطيف! ما نظام التشغيل؟ هذا قد يكون له علاقة بعملية وضع البيض. - Camilo Martin
Nakilon وهذا هو السبب في أن المرء لا ينبغي أن يعتمد على وسائل الراحة مثل تلك التي يمكن إنتاجها لأي شيء. - Camilo Martin


هذا الحل يعمل على ماكوس.

إذا كنت تفكر في استخدام برنامج نصي bash وكان هناك python متاحًا ، فيمكنك استخدام هذا الرمز:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

3
2018-02-05 14:26



لماذا التصويت أسفل؟ - Frank Thonig
لا يبدو مبررا بشكل خاص. تلميح على السهم لأسفل يقول "هذا الجواب غير مفيد" ، ولكن IMO أنه من المفيد. ربما أرادوا منك أن تجعله نصًا بايثونًا بدلاً من ذلك. سيكون ذلك أبسط ويعمل بشكل جيد أيضًا كأمر bash. - Andrew Schulman
لا تقلق كثيرًا من التراجع (لم يكن لي) ... خاصة إذا كانت غير معروفة (لا يمكن للمرء أن يتعلم منها ما يبدو أنه خطأ ، أليس كذلك؟). لمجرد أن تفلس أنت تعالجها ... هنا يذهب آخر +1 ... تخمين ما: يسمح لك أيضا "التصويت" الآن ، أليس كذلك؟ - Pierre.Vriens
يبدو أن التراجع كان بسبب مشكلة في النظام. منذ ذلك الحين تمت إزالته ، مرة أخرى من قبل النظام. - Michael Hampton♦