كيف يمكنني تغيير تنسيق موعد من سطر الأوامر؟
-
07-07-2019 - |
سؤال
ما هي أسرع طريقة لتحويل تاريخ بتنسيق واحد ، على سبيل المثال
2008-06-01
إلى موعد بتنسيق آخر ، قل
الأحد الأول من يونيو 2008
الشيء المهم هو في الواقع "الشمس" لأنه بناءً على اسم DayName ، قد أحتاج إلى تململ أشياء أخرى حولها - بطريقة غير محددة. أنا أقوم بتشغيل GNU Bash ، الإصدار 3.2.17 (1) -release (i386-apple-darwin9.0).
الخلفية: السبب في أنني أريد أن أفعل ذلك من سطر الأوامر ، هو أن ما أريده حقًا هو كتابته إلى أمر Textmate ... إنها مهمة مزعجة يجب أن أفعلها طوال الوقت في Textmate.
المحلول
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30
نرى man date
لخيارات التنسيق الأخرى.
هذا الخيار متاح على Linux ، ولكن ليس على داروين. في داروين ، يمكنك استخدام بناء الجملة التالي بدلاً من ذلك:
date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"
تحدد الوسيطة -F تنسيق الإدخال وتوسيط + يحدد تنسيق الإخراج.
كما أشار ملصق آخر أدناه ، سيكون من الحكمة استخدام ٪ U (يوم رقمي من الأسبوع) بدلاً من ٪ A لتجنب مشاكل التوطين.
نصائح أخرى
اقرأ ال التاريخ (1) قد كشف Manpage:
-ج Do not try to set the date. This allows you to use the -f flag in addition to the + option to تحويل تنسيق تاريخ إلى آخر.
شكرا على تلك SGM. لذلك فقط حتى أتمكن من العودة للإشارة إليها -
date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y"
^ ^ ^
parse using | output using
this format | this format
|
date expressed in
parsing format
Thu 3 Jan 2008
شكرًا.
date -d yyyy-mm-dd
إذا كنت تريد المزيد من التحكم في التنسيق ، يمكنك أيضًا إضافته على هذا النحو:
date -d yyyy-mm-dd +%a
للحصول على جزء من الشمس التي تقول أنك تريدها.
date -d ...
لا يبدو أنه يقطعها ، حيث أحصل على خطأ في الاستخدام:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
أنا أقوم بتشغيل Gnu Bash ، الإصدار 3.2.17 (1) -release (i386-apple-darwin9.0) ، وبقدر ما يذهب الرجل ، فإن Date -D هو فقط ل
-d dst Set the kernel's value for daylight saving time. If dst is non-
zero, future calls to gettimeofday(2) will return a non-zero for
tz_dsttime.
إذا كنت تتطلع فقط للحصول على يوم الأسبوع ، فلا تحاول مطابقة السلاسل. هذا ينكسر عندما تتغير اللغة. ال %u
تنسيق يمنحك رقم اليوم:
$ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
4
وبالفعل ، كان ذلك يوم الخميس. يمكنك استخدام هذا الرقم للفهرس في صفيف لديك في البرنامج ، أو مجرد استخدام الرقم نفسه.
راجع تاريخ صفحات Man Man و Strftime لمزيد من التفاصيل. إن ManPage على OS X هو الخاطئ ، لأنه لا يسرد هذه الخيارات التي تعمل.