1、查看和修改Linux的時區html
1. 查看當前時區
命令 : "date -R"linux
2. 修改設置Linux服務器時區
方法 A
命令 : "tzselect"sql
方法 B 僅限於RedHat Linux 和 CentOS
命令 : "timeconfig"shell
方法 C 適用於Debian
命令 : "dpkg-reconfigure tzdata"數據庫
3. 複製相應的時區文件,替換系統時區文件;或者建立連接文件
cp /usr/share/zoneinfo/主時區/主時區/次時區 /etc/localtimecentos
例如:在設置中國時區使用亞洲/上海(+8)bash
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime服務器
2、查看和修改Linux的時間session
1. 查看時間和日期
命令 : "date"oracle
2.設置時間和日期
例如:將系統日期設定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
將系統時間設定成下午5點55分55秒的命令
命令 : "date -s 17:55:55"
3. 將當前時間和日期寫入BIOS,避免重啓後失效
命令 : "hwclock -w"
注:
date
不加參數能夠直接看到當前日期時間
cal
不加參數能夠直接看到本月月曆
3、date命令的功能是顯示和設置系統日期和時間。
該命令的通常格式爲: date [選項] 顯示時間格式(以+開頭,後面接格式)
date 設置時間格式
命令中各選項的含義分別爲:
-d datestr, --date datestr 顯示由datestr描述的日期
-s datestr, --set datestr 設置datestr 描述的日期
-u, --universal 顯示或設置通用時間 時間域
% H 小時(00..23)
% I 小時(01..12)
% k 小時(0..23)
% l 小時(1..12)
% M 分(00..59)
% p 顯示出AM或PM
% r 時間(hh:mm:ss AM或PM),12小時
% s 從1970年1月1日00:00:00到目前經歷的秒數
% S 秒(00..59)
% T 時間(24小時制)(hh:mm:ss)
% X 顯示時間的格式(%H:%M:%S)
% Z 時區 日期域
% a 星期幾的簡稱( Sun..Sat)
% A 星期幾的全稱( Sunday..Saturday)
% b 月的簡稱(Jan..Dec)
% B 月的全稱(January..December)
% c 日期和時間( Mon Nov 8 14:12:46 CST 1999)
% d 一個月的第幾天(01..31)
% D 日期(mm/dd/yy)
% h 和%b選項相同
% j 一年的第幾天(001..366)
% m 月(01..12)
% w 一個星期的第幾天(0表明星期天)
% W 一年的第幾個星期(00..53,星期一爲第一天)
% x 顯示日期的格式(mm/dd/yy)
% y 年的最後兩個數字( 1999則是99)
% Y 年(例如:1970,1996等)
須要特別說明的是,只有超級用戶才能用date命令設置時間,通常用戶只能用date命令顯示時間。
下列環境變量將會影響到 date 命令的執行效果。 資料整理 www.linuxso.com
LANG
肯定在 LC_ALL 和相應的環境變量(以 LC_ 開頭)都不指定語言環境的時候將要使用的缺省語言環境。
LC_ALL
肯定用於覆蓋由 LANG 或任何以 LC_ 開頭的環境變量設置的任何語言環境類別值的語言環境。
LC_CTYPE
肯定文本數據的字節序列解釋爲字符時使用的語言環境(例如參數中單對多字節字符)。
LC_MESSAGES
決定寫信息應使用的語言。
LC_TIME
肯定由 date 寫入的日期和時間字符串的內容。
NLSPATH
爲處理 LC_MESSAGES 決定消息目錄的位置。
TZ
指定時間和日期使用的時區,除非指定了 -u 選項。若是未設置 TZ 變量且未指定 -u 標誌,則使用非指定的系統缺省時區。
例子:
#date //顯示當前日期
#date -s //設置當前時間,只有root權限才能設置,其餘只能查看。
#date -s 20061010 //設置成20061010,這樣會把具體時間設置成空00:00:00
#date -s 12:23:23 //設置具體時間,不會對日期作更改
#date -s 「12:12:23 2006-10-10″ //這樣能夠設置所有時間
CST:中國標準時間(China Standard Time),這個解釋多是針對RedHat Linux。
UTC:協調世界時,又稱世界標準時間,簡稱UTC,從英文國際時間/法文協調時間」Universal Time/Temps Cordonné」而來。中國大陸、香港、澳門、臺灣、蒙古國、新加坡、馬來西亞、菲律賓、澳洲西部的時間與UTC的時差均爲+8,也就是UTC+8。
GMT:格林尼治標準時間(舊譯格林威治平均時間或格林威治標準時間;英語:Greenwich Mean Time,GMT)是指位於英國倫敦郊區的皇家格林尼治天文臺的標準時間,由於本初子午線被定義在經過那裏的經線。
設置完系統時間後,還須要同步到硬件時鐘上
# clock --systohc
上面命令中,--hctosys表示Hardware Clock to SYStem clock。
Linux系統有系統時間和硬件時間之分:
系統時間: 通常說來就是咱們執行 date命令看到的時間,linux系統下全部的時間調用(除了直接訪問硬件時間的命令)都是使用的這個時間。
硬件時間:主板上BIOS中的時間,由主板電池供電來維持運行,系統開機時要讀取這個時間,並根據它來設定系統時間(注意:系統啓動時根據硬件時間設定系統時間的過程可能存在時區換算,這要視具體的系統及相關設置而定)。
一、查看當前系統時間date:
[root@surfer ~]#date
2018年06月 26日星期二 10:09:21 CST
二、設置系統時間date -s +時間
[root@surfer ~]#date -s 10:10:10
2018年06月 26日星期二 10:10:10 CST
三、設置系統時間時,若是還須要設置日期,則要將日期與時間值用雙引號包裹起來
[root@surfer ~]#date -s "2018/8/8 10:00:00"
2018年08月 08日星期三 10:00:00 CST
四、查看硬件時間用hwclock或者clock命令:
[root@surfer ~]#hwclock
2018年06月26日 星期二 10時13分02秒 -0.805503 秒
[root@surfer ~]#clock
2018年06月26日 星期二 10時13分07秒 -0.507462 秒
五、將硬件時間寫入到系統時間:
[root@surfer ~]#hwclock -s
六、將系統時間寫入到硬件時間
[root@surfer ~]#hwclock -w
七、時間同步,Linux系統需安裝ntpdate
檢查是否安裝了ntpdate : rpm -qa | grep ntpdate
若是沒有安裝則運行以下命令:yum install ntpdate
時間同步命令:ntpdate www.pool.net.org ,其中 www.pool.net.org 是互聯網中標準時間服務器
八、contab命令
經過vi /etc/crontab命令能夠看到定時任務的書寫格式
[root@surfer ~]# vi/etc/crontab
SHELL=/bin/bash #SHELL變量指定了系統要使用哪一個shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH變量指定了系統執行命令的路徑
MAILTO=root #MAILTO變量指定了crond的任務執行信息將經過電子郵件發送給root用戶,若是MAILTO變 量的值爲空,則表示不發送任務執行信息給用戶
# For details seeman 4 crontabs
# Example of jobdefinition:
# .---------------- minute (0 - 59) #分鐘
# | .------------- hour (0 -23) #小時
# | | .---------- day of month (1 - 31) #日期
# | | | .------- month (1 - 12) OR jan,feb,mar,apr … #月份
# | | | | .---- day of week (0 - 6)(Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat #周
# | | | | |
# * * * * * user-name command to be executed
在以上各個字段中,還可使用如下特殊字符:
星號(*):表明全部可能的值,例如month字段若是是星號,則表示在知足其它字段的制約條件後每個月都執行該命令操做。
逗號(,):能夠用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
橫槓(-):能夠用整數之間的橫槓表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
斜線(/):能夠用斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時斜線能夠和星號一塊兒使用,例如*/10,若是用在minute字段,表示每十分鐘執行一次。
crontab -l :列出當前用戶的crontab文件內容
* * * * */usr/local/gse/agent/bin/gsectl watch
crontab -e :編輯當前用戶的crontab文件內容
[root@surfer data]#crontab -e
*/1 * * * * echo"hello world">>/data/code.txt
~在這裏我添加了一個定時任務*/1 * * * * echo"hello world">>/data/code.txt :意思是每一分鐘打印一次hello world,而且重定向到了/data/code.txt文件裏面,幾分鐘事後查看code.txt,出現了以下內容,說明這個定時任務已經開始執行
首先使用w命令查看全部在線用戶:
[root@VM_152_184_centos /]# w
20:50:14 up 9 days, 5:58, 3 users, load average: 0.21, 0.05, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 101.45.224.253 20:48 0.00s 0.00s 0.00s w
root pts/1 101.45.224.253 20:49 17.00s 0.00s 0.00s -bash
hmj pts/2 101.45.224.253 20:50 2.00s 0.00s 0.00s -bash
執行命令:
pkill -kill -t TTY值
例:踢掉已登陸用戶hmj
pkill -kill -t pts/2
再用w命令查看是否已經強制踢掉:
[root@VM_152_184_centos /]# w
20:55:10 up 9 days, 6:03, 2 users, load average: 0.03, 0.03, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 101.45.224.253 20:48 0.00s 0.00s 0.00s w
root pts/1 101.45.224.253 20:49 5:13 0.00s 0.00s -bash
Oracle 9i 開始多了 3 個關於時間的數據類型:TIMESTAMP [(precision)] TIMESTAMP [(precision)] WITH TIME ZONE TIMESTAMP [(precision)] WITH LOCAL TIME ZONE,其中 TIMESTAMP [(precision)] WITH TIME ZONE 保存了時區信息。
1. Oracle 的時區設置
Oracle 的時區能夠分爲兩種,一種是數據庫的時區,一種是 session 時區,也就是客戶端鏈接時的時區(通過實驗,鏈接之後再修改客戶端的時區,session 的時區不會更改)。
數據庫的時區在建立數據庫時能夠經過在 create database 語句中加上 SET TIME_ZONE = ' { { + | - } hh : mi | time_zone_region } ' 來指定,若是,不指定,默認是按照數據庫所在的操做系統時區來設定的。建立以後,能夠經過 alter database 來修改。其中 time_zone_region 參數能夠經過查詢 V$TIMEZONE_NAMES 動態視圖來得到全部支持的值。修改以後,須要重啓數據庫才能生效。常常有人會碰到沒法修改的狀況:
SQL> alter database set time_zone='+06:00';
alter database set time_zone='+06:00'
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
TOM 對此問題有過解釋,TIME_ZONE 的設定主要是爲了 WITH LOCAL TIME ZONE,當 session 的時區和數據庫的時區不一樣時,oracle 根據時區的差距轉換到數據庫的時間,再保存到數據庫的 WITH LOCAL TIME ZONE 類型中,他是不保存時區的,因此須要 TIME_ZONE 來進行各類時區之間時間的轉換(WITH TIME ZONE 類型保存了原始的時區,因此不須要 TIME_ZONE 的設置也能夠進行各類時區之間的轉換)。但數據庫中一旦有了該類型,就不能經過 alter database 修改時區了,會獲得上面的錯誤,能夠經過下面的語句得到全部包含該類型的表,將他們刪除以後,再修改。
select u.name || '.' || o.name || '.' || c.name TSLTZcolumn
from sys.obj$ o, sys.col$ c, sys.user$ u
where c.type# = 231
and o.obj# = c.obj#
and u.user# = o.owner#;
(通常查詢後的結果爲:OE.ORDERS.ORDER_DATE,指的是OE用戶下的ORDERS表的ORDER_DATE字段使用了時區的信息:WITH LOCAL TIME ZONE,將此信息去掉就能夠再修改了,修改好了以後須要重啓數據庫才能生效)
Session 的時區是根據客戶端的時區來決定的,固然鏈接之後也能夠經過 alter session 來改變。WITH LOCAL TIME ZONE 類型會根據 TIME_ZONE 的設置,自動把時間轉換爲 session 所在時區的時間顯示出來,而 WITH TIME ZONE 由於保存了時區,不須要根據 TIME_ZONE 的設置來轉換。
2. 查看時區
能夠分別使用 SESSIONTIMEZONE / DBTIMEZONE 內建函數查看 session 和數據庫時區:
SYS@SKYDB> select dbtimezone from dual;
DBTIME
------
+08:00
SYS@SKYDB> select sessiontimezone from dual;
SESSIONTIMEZONE
---------------------------------------------
+09:00
另外能夠用 TZ_OFFSET 查詢某時區和 UTC 之間的差值。
TZ_OFFSET ( { 'time_zone_name'
| '{ + | - } hh : mi'
| SESSIONTIMEZONE
| DBTMEZONE }
)
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;
TZ_OFFS
-------
-04:00
SELECT TZ_OFFSET(DBTIMEZONE) FROM DUAL;
TZ_OFFSET(DBTI
--------------
+08:00
其中 time_zone_name 也能夠從 V$TIMEZONE_NAMES 得到。
3. 幾個內建時間函數的比較
sysdate/systimestamp 都是返回數據庫的時間而且使用數據庫的時區,他們返回的是操做系統的時間。sysdate 返回的是 date 類型,沒有時區信息,操做系統上是什麼時間就返回什麼時間;systimestamp 返回 TIMESTAMP WITH TIME ZONE 類新,有時區信息:
SYS@SKYDB> select sysdate from dual;
SYSDATE
-------------------
2006-08-03 10:01:31
SYS@SKYDB> select systimestamp from dual;
SYSTIMESTAMP
-----------------------------------------------
03-AUG-06 10.02.21.093000 AM +08:00
SYS@SKYDB> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
修改操做系統時區爲 +02:00
SYS@SKYDB> startup
ORACLE instance started.
Total System Global Area 89202456 bytes
Fixed Size 454424 bytes
Variable Size 62914560 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
SYS@SKYDB> select sysdate from dual;
SYSDATE
-------------------
2006-08-03 04:03:37
SYS@SKYDB> select systimestamp from dual;
SYSTIMESTAMP
----------------------------------------------
03-AUG-06 04.04.15.687000 AM +02:00
注:不知道爲何不能經過 ipc 來鏈接本地數據了,登錄時使用 sqlplus "/@skydb as sysdba",也就是使用了監聽器來鏈接,但在家裏作相同的實驗,經過 ipc 鏈接 sqlplus "/as sysdba",修改時區後,sysdate 依然顯示修改前的時間,而 systimestamp 卻正確,不知道是什麼緣由:
SQL> select sysdate from dual;
SYSDATE
-------------------
2006-02-08 22:21:40
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
02-AUG-06 10.22.38.578000 PM +08:00
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
修改時區爲 +09:00
SQL> startup
ORACLE instance started.
Total System Global Area 131145064
bytes
Fixed Size 453992
bytes
Variable Size 109051904
bytes
Database Buffers 20971520
bytes
Redo Buffers 667648
bytes
Database mounted.
Database opened.
SQL> select sysdate from dual;
SYSDATE
---------
02-AUG-06
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2006-08-02 22:32:59
<- 仍是以前的時間
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
02-AUG-06 11.35.05.171000 PM +09:00
<- 時間正確
另外,有個初始化參數 fixed_date,能夠設置 sysdate 返回指定的時間:
alter system set fixed_date='2005-04-04-11-00-00'
this fixed_date is normally used, in oracle, for dubugging purpose.
once finishing it, you can set it back:
alter system set fixed_date=none
current_timestamp/current_date 也會返回數據庫的時間,但轉換爲 session 的時區進行顯示,可使用 alter session set time_zone 改變 session 時區。
4. 四個日期時間類型的實驗
SQL> select dbtimezone from dual;
DBTIME
------
+06:00
SQL> select sessiontimezone from dual;
SESSIONTIMEZONE
---------------------------------------------------------------------------
+08:00
SQL> ed
Wrote file afiedt.buf
1 create table tztest(a date,
2 b timestamp(0),
3 c timestamp(0) with time zone,
4* d timestamp(0) with local time zone)
SQL> /
Table created.
SQL> alter session set nls_date_format ='yyyy-dd-mm hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2006-02-08 22:21:40
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
02-AUG-06 10.22.38.578000 PM +08:00
SQL> select current_date from dual;
CURRENT_DATE
-------------------
2006-02-08 22:23:50
SQL> select current_timestamp from dual;
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
02-AUG-06 10.24.04.031000 PM +08:00
SQL> insert into tztest
2 values(sysdate,systimestamp,systimestamp,systimestamp);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from tztest;
A
-------------------
B
---------------------------------------------------------------------------
C
---------------------------------------------------------------------------
D
---------------------------------------------------------------------------
2006-02-08 22:25:59
02-AUG-06 10.25.59 PM
02-AUG-06 10.25.59 PM +08:00
02-AUG-06 10.25.59 PM
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
修改了客戶端操做系統的時區
C:\Documents and Settings\Administrator>sqlplus sky/xxxx
SQL*Plus: Release 9.2.0.3.0 - Production on Wed Aug 2 23:28:01 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2006-08-02 22:28:49
<-數據庫沒有重啓,時間依然是修改前的
SQL> select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
02-AUG-06 11.29.33.609000 PM +09:00
<- 這裏卻已經改變了,有時區信息,自動轉換了?
SQL> select * from tztest;
A
-------------------
B
---------------------------------------------------------------------------
C
---------------------------------------------------------------------------
D
---------------------------------------------------------------------------
2006-08-02 22:25:59
<- 沒變
02-AUG-06 10.25.59 PM
<- 沒變
02-AUG-06 10.25.59 PM +08:00
<- 保存時區信息
02-AUG-06 11.25.59 PM
<-自動轉換爲 session 的時區