كيف يمكنني تغيير تنسيق موعد من سطر الأوامر؟

StackOverflow https://stackoverflow.com/questions/279329

  •  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 هو الخاطئ ، لأنه لا يسرد هذه الخيارات التي تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top