cur_date=`date +"%m/%d/%Y"` (Output 04/01/2016)
cur_day=`date +"%a"` (Output Fri)
我想從上面的命令 創建一個新的問題,但我也想日期在殼牌日轉換(SUN OS)
cur_day = cur_date +「X」
我需要有人幫我用「X」。
cur_date=`date +"%m/%d/%Y"` (Output 04/01/2016)
cur_day=`date +"%a"` (Output Fri)
我想從上面的命令 創建一個新的問題,但我也想日期在殼牌日轉換(SUN OS)
cur_day = cur_date +「X」
我需要有人幫我用「X」。
我將當前日期轉換爲秒,因爲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")'
腳註
86,400是多少在正常的一天中秒。您可能認爲使用該常量的上述解決方案在leap seconds的屏幕上無法正常工作,但由於您要求以天爲單位的精度,因此可能與無關。
只有當您的腳本在閏秒調整的正確第二秒運行時,這通常發生在午夜UTC + 0。在北美,這通常是在營業時間之後。有些網站將閏秒調整移至更方便的時間,例如當地時間凌晨2點。如果你的腳本沒有在那個瞬間運行,閏秒不會影響它。
這些調整每隔幾年只發生一次,調整時間會提前幾個月公佈,所以如果您的腳本必須在當時運行並且其答案必須包含閏秒調整,您可以對此進行規劃。
所有版本的Solaris都包含一個POSIX shell,因爲POSIX早於Solaris 1.0。
至少在Solaris 11中是如此,因爲它與POSIX date(1)
spec的關係非常接近。
我在這裏沒有測試Solaris 9的盒子,所以我依賴於有根據的猜測:首先,Solaris 9帶有Perl,如Solaris 10和11,第二,它是Perl 5 ,所以它會接受解決方案中的the -MPOSIX
flag。 Perl 4不支持模塊,所以它沒有-M
標誌。我確信我可以寫一個不同的解決方案,可以與Perl 4一起工作,但是由於您不需要它在遠處工作,並且自從我編寫任何Perl 4以來已有二十年的時間了... ...
目前尚不清楚你的意思。你能詳細說明一下嗎? – fedorqui
通過「SunOS」,你的字面意思是SunOS 1-4,還是你在談論某種版本的Solaris,又名SunOS 5?請明確點。 –
嗨Fedorqui&Warren,我編輯了這個問題......讓我知道如果我仍然不清楚 – Joel