2010-03-22 8 views
5

मैं दिन पर प्रत्यय को कैसे जोड़ सकता हूं?दिन (st, nd, rd और th) पर प्रत्यय शामिल करने के लिए यूनिक्स में दिनांक स्वरूपण

मैं समझाऊंगा। मेरे पास टेक्स्टमैट बंडल स्निपिट है जो आज की तारीख लिखता है। यह यूनिक्स दिनांक और स्वरूपण का उपयोग करता है।

`date +%A` `date +%d` `date +%B` `date +%Y` 

यह आउटपुट:: यहाँ कोड है

सोमवार 22 मार्च 2010

मैं दिन (करने के लिए प्रत्यय जोड़ना चाहते हैं सेंट, nd, rd और वें) जैसे:

,210

सोमवार 22 मार्च 2010

जहां तक ​​मैं देख सकता हूँ, वहाँ यूनिक्स तिथि स्वरूपण में कोई मूल समारोह, वहाँ पीएचपी (जे) में है की तरह है। मैं इसे यूनिक्स में कैसे प्राप्त करूं? दिन संख्या पर एक जटिल regex?

+0

नहीं वास्तव में अपने सवाल का जवाब है, लेकिन मैं तारीख आदेशों को मजबूत करेंगे: तारीख "+% एक% d% बी% Y" -> सोमवार 22 मार्च 2010 – zigdon

+0

अगर मैं तुम्हें थे, मैं था एक छोटी PHP स्क्रिप्ट लिखें (क्योंकि आप पहले ही जानते हैं कि इसे कैसे करें), और इसे निष्पादित करें। मुझे नहीं पता, अगर लक्ष्य प्रणाली पर PHP स्थापित करना संभव है। –

उत्तर

3

मेरे पास लिनक्स मशीन (उबंटू 8.10) पर कुछ समान काम है। मुझे नहीं लगता कि यह सोलारिस के साथ काम करेगा, मैंने जिस मशीन का परीक्षण किया है, वह 0 के साथ क्षेत्र को पैडिंग से बचने के लिए% के बाद _ वर्ण का उपयोग करने की अनुमति नहीं देता है। गैर-पैडिंग 01 की बजाय 1 को वापस करने की अनुमति देता है (01 वें 1 बनाम सही दिखता नहीं है)।

मैं एक शैल फ़ंक्शन का उपयोग करता हूं (फिर से, आपका ओएस या शैल संस्करण जिस तरह से मैंने फ़ंक्शन को परिभाषित किया है) डेसफिक्स नामक नहीं है, फिर उस कॉल को डेट कॉल के हिस्से के रूप में कॉल करें। Func खुद काफी हैकी, मुझे यकीन है कि ऐसा करने का एक बेहतर तरीका है लेकिन यह मेरे लिए काम करता है। 11, 12, & 13 के लिए विशेष मामलों पर ध्यान दें - आपको अंग्रेजी भाषा से प्यार करना होगा!

#!/bin/sh 

DaySuffix() { 
    if [ "x`date +%-d | cut -c2`x" = "xx" ] 
    then 
     DayNum=`date +%-d` 
    else 
     DayNum=`date +%-d | cut -c2` 
    fi 

    CheckSpecialCase=`date +%-d` 
    case $DayNum in 
    0) 
     echo "th" ;; 
    1) 
     if [ "$CheckSpecialCase" = "11" ] 
     then 
     echo "th" 
     else 
     echo "st" 
     fi ;; 
    2) 
     if [ "$CheckSpecialCase" = "12" ] 
     then 
     echo "th" 
     else 
     echo "nd" 
     fi ;; 
    3) 
     if [ "$CheckSpecialCase" = "13" ] 
     then 
     echo "th" 
     else 
     echo "rd" 
     fi ;; 
    [4-9]) 
     echo "th" ;; 
    *) 
     return 1 ;; 
    esac 
} 

# Using consolidated date command from chris_l 
# Also using %-d instead of %d so it doesn't pad with 0's 
date "+%A %-d`DaySuffix` %B %Y" 
+0

मैं अपनी समस्या को ठीक करने के लिए इस कोड का उपयोग करने में सक्षम था। हालांकि, मैं +% - डी का उपयोग नहीं कर सका क्योंकि डैश की अनुमति नहीं है। केवल सख्त यूनिक्स स्वरूपण। http://en.wikipedia.org/wiki/Date_(Unix)। मैंने इसकी जगह +% ई का उपयोग किया और यह अच्छी तरह से काम करता है। हालांकि मुझे लगता है कि यह एकल अंकों (जैसे 1-9) के साथ एक अतिरिक्त स्थान जोड़ता है। मैं उस समस्या को 1 अप्रैल को ठीक कर दूंगा। सहायता के लिए धन्यवाद। ;) – skymook

5

कोशिश करें।

#!/bin/sh 
DaySuffix() { 
    case `date +%d` in 
    1|21|31) echo "st";; 
    2|22) echo "nd";; 
    3|23) echo "rd";; 
    *)  echo "th";; 
    esac 
} 
date "+%A %d`DaySuffix` %B %Y" 
संबंधित मुद्दे