在
linux
下gnu shell 的date命令很方便解決這個問題,
echo `date -d yesterday +%y%m%d`
輸出:20120912
但是公司的
伺服器是unix,shell版本為ksh不能使用『-d』選項 不能直接獲取昨天的日期和時間
然後在網上搜尋,發現有人已經問過這個問題,
答案就是:
echo `tz=aaa24 date +%y%m%d`
輸出:20120912
測試一下滿心歡喜,於是寫入crontab任務,第二天凌晨1點自動備份
資料庫結果第二天上班卻發現備份了前台的既20120911的資料。
然後在 伺服器上直接執行備份的指令碼,仍然備份的是12日的資料。很奇怪。
於是列印出具體時間
echo `date +%y%m%d\ %h:%m:%s`
20120913 01:12:18
echo `tz=aaa24 date +%y%m%d\ %h:%m:%s`
輸出:20120911 17:13:43
原來這種方法是有風險的,
date列印的並不是本地時區的時間,而是標準時間,既倫敦時間。
倫敦在西一區,北京在東八區相差八個時區,所以我們上午一點的時候他們本來就是昨天的下午5點。
然後在這個基礎上又增加一天,所以得到的是前天的下午五點。。。
。。。地理學不好,程式也寫不好啊。。
所以只要將時區進行調整才能正確的列印出當前時區的昨天的日期和時間。
echo `tz=aaa16 date +%y%m%d\ %h:%m:%s`
輸出: 20120912 01:18:02
這才是正確的日期和時間。
剛開始沒有搞清楚tz的正確意思所以才生搬硬套,浪費了時間。
tz是乙個系統的環境變數,記錄了系統所在的時區,aaa可以為任意字串,16和24表示與標準時間的時差。
設計Unix下 程式
文章試讀 不拘乙個遍程式系列 程式設計序不能乙個腦袋鑽到底,有時要學會變通,即所謂的曲線救國。一 二 三 四 職場規劃 一些雜七雜八的職場感悟吧。不值錢的軟體人才 精力充沛與事業成功 讓係分來得更猛烈些吧 不值錢的系統分析師 經濟危機下大學生如何就業 我的詩歌 都是我的打油詩,但是很值得一讀。不要工...
Unix下常用shell命令
殺掉指定名稱的程序 k.sh ps ef grep 1 grep v grep awk xargs kill 9例 sh k.sh gjobs 系統庫路徑 usr include profile中設定環境變數 export oracle base ora inst profile中自定義命令 ali...
Unix訊號機制 下
一 時序競態 在訊號 上 裡面講解了訊號基礎的用法。但是考慮一下這樣的場景,比如我用alarm函式定時3秒,但是在定時完成後,cpu排程去執行其它的程序了,過了4秒,才回到之前執行到的地方,但是alarm定時的時間已經過了,那麼還沒等到執行下一條語句,訊號就先被處理了,可能導致程式的邏輯出現問題。這...