2016-03-31 203 views
0
cur_date=`date +"%m/%d/%Y"`   (Output 04/01/2016)           
cur_day=`date +"%a"`    (Output Fri) 

我想從上面的命令 創建一個新的問題,但我也想日期在殼牌日轉換(SUN OS)

cur_day = cur_date +「X」

我需要有人幫我用「X」。

+0

目前尚不清楚你的意思。你能詳細說明一下嗎? – fedorqui

+0

通過「SunOS」,你的字面意思是SunOS 1-4,還是你在談論某種版本的Solaris,又名SunOS 5?請明確點。 –

+0

嗨Fedorqui&Warren,我編輯了這個問題......讓我知道如果我仍然不清楚 – Joel

回答

-1

如何:

timestamp="$(date +'%m/%d/%Y') $(date +'%a')" 

,這將等同於:

timestamp="04/01/2016 Fri" 
+0

謝謝你,但我正在尋找答案X dateday = cur_date +/-「X」= cur_day – Joel

+0

對不起,但我不明白你的意思是+/-。你能用言語改述你的問題嗎?如「我想從一個日期計算星期幾」;或「我想從日期計算第二天」。 – o9000

+0

其實我使用的簡單計算術語...就像10 +/- 0 = 10 ..它不是實際的代碼...我認爲這很容易理解... – Joel

1

我將當前日期轉換爲秒,因爲the Unix epoch,加上我需要的時間86,400抵消天數¹,然後將其轉換回人類可讀的日期。

的Solaris 11的(又名的SunOS 5.11)date(1)程序可以通過date '+%s'做的第一部分,並且POSIXshell²可以做算術(例如echo $(($(date '+%s') + 3 * 86400))),但的date在Solaris版本不能把該日期-在秒值回人類格式date.³

如果你的系統已經安裝GNU date作爲gdate(如Solaris 11一樣),可以關閉最後一個缺口:

$ gdate -d @$(($(gdate '+%s') + 3 * 86400)) '+%m/%d/%Y' 

,給出了一個人類格式版本「3天后」。

不幸的是,Solaris 10(又名SunOS 5.10)沒有預裝GNU工具。如果你不願意安裝它們,你需要一個不同的解決方案。

確實在Solaris 10的工作和新的方法是使用Perl,它可以做同樣的事情在一個班輪:

$ perl -MPOSIX -e 'print strftime("%m/%d/%Y", localtime(time + 3 * 86400)), "\n"' 

可能的工作早的Solaris 9。 4

如果您需要更復雜的日期操作,我推薦使用Perl Date::Manip模塊。它非常強大。它是狩獵蝴蝶用大錘,但這裏是你如何會在一個Perl一行程序做上述事情Date::Manip

$ perl -MDate::Manip -e 'print UnixDate(DateCalc("now", "3d"), "%m/%d/%Y\n")' 

腳註

  1. 86,400是多少在正常的一天中秒。您可能認爲使用該常量的上述解決方案在leap seconds的屏幕上無法正常工作,但由於您要求以天爲單位的精度,因此可能與無關。

    只有當您的腳本在閏秒調整的正確第二秒運行時,這通常發生在午夜UTC + 0。在北美,這通常是在營業時間之後。有些網站將閏秒調整移至更方便的時間,例如當地時間凌晨2點。如果你的腳本沒有在那個瞬間運行,閏秒不會影響它。

    這些調整每隔幾年只發生一次,調整時間會提前幾個月公佈,所以如果您的腳本必須在當時運行並且其答案必須包含閏秒調整,您可以對此進行規劃。

  2. 所有版本的Solaris都包含一個POSIX shell,因爲POSIX早於Solaris 1.0。

  3. 至少在Solaris 11中是如此,因爲它與POSIX date(1) spec的關係非常接近。

  4. 我在這裏沒有測試Solaris 9的盒子,所以我依賴於有根據的猜測:首先,Solaris 9帶有Perl,如Solaris 10和11,第二,它是Perl 5 ,所以它會接受解決方案中的the -MPOSIX flag。 Perl 4不支持模塊,所以它沒有-M標誌。我確信我可以寫一個不同的解決方案,可以與Perl 4一起工作,但是由於您不需要它在遠處工作,並且自從我編寫任何Perl 4以來已有二十年的時間了... ...