关于时区的知识

1、概念和换算

PST - 美国太平洋标准时间

GMT 格林威治标准时间

几个换算公式,因为是24进制,看起来有点怪:

(GMT +8)-16 =PST

PST+7 = GMT

PST+16 = GMT + 8(中国)

我们是东八区,加州是西八区,中间差16个小时。

2、关于日期中的时区标志。

由于都在互联网上,大家在各个时区的事件表示有所不同,因此日期要转换到当前时区的日期和时间,在互联网上,大家一般都用CTS(世界标准时间)有称作GMT(格林尼治时间)。

譬如日期时间为:Sat, 30 Mar 2002 13:27:08 -0800,我们当前所在的时区为正8区(北京时间),则用我们所在时区表示就是 Sat, 30 Mar 2002 29(13+16):27:08 即Sun, 31 Mar 2002 6:27:08 +8000。 ---??

目前存在的时区有:

GMT 格林威治标准时间 GMT

UTC 全球标准时间 GMT

ECT 欧洲中部时间 GMT+1:00

EET 东欧时间 GMT+2:00

ART (阿拉伯)埃及标准时间 GMT+2:00

EAT 东非时间 GMT+3:00

MET 中东时间 GMT+3:30

NET 近东时间 GMT+4:00

PLT 巴基斯坦拉合尔时间 GMT+5:00

IST 印度标准时间 GMT+5:30

BST 孟加拉国标准时间 GMT+6:00

VST 越南标准时间 GMT+7:00

CTT 中国台湾时间 GMT+8:00

JST 日本标准时间 GMT+9:00

ACT 澳大利亚中部时间 GMT+9:30

AET 澳大利亚东部时间 GMT+10:00

SST 所罗门标准时间 GMT+11:00

NST 新西兰标准时间 GMT+12:00

MIT 中途岛时间 GMT-11:00

HST 夏威夷标准时间 GMT-10:00

AST 阿拉斯加标准时间 GMT-9:00

PST 太平洋标准时间 GMT-8:00

PNT 菲尼克斯标准时间 GMT-7:00

MST 西部山脉标准时间 GMT-7:00

CST 中部标准时间 GMT-6:00

EST 东部标准时间 GMT-5:00

IET 印第安那东部标准时间 GMT-5:00

PRT 波多黎各和美属维尔京群岛时间 GMT-4:00

CNT 加拿大纽芬兰时间 GMT-3:30

AGT 阿根廷标准时间 GMT-3:00

BET 巴西东部时间 GMT-3:00

CAT 中非时间 GMT-1:00

3、教你怎样在Oracle 9i中正确转换时区

在Oracle9i之前,虽然有一个NEW_TIME函数可以改变DATE的时间戳部分,但是还没有专门用来存储时区信息的数据类型。在Oracle9i中,我们可以使用DBTIMEZONE伪字段查询数据库的时区,使用SESSIONTIMEZONE伪字段查询会话的时区。

但是,对于大多数数据库,这些值都是-07:00之类的偏移值,因此对于NEW_TIME函数是没有用的。Oracle9i有关NEW_TIME的文档建议使用FROM_TZ来替代,但是这可能会产生误导。FROM_TZ只将一个时区应用到一个时间戳上;它并不能把一个时区转换成另外一个时区。

其实有一个比较好的方法(从文档中得到这个方法可能有点难)。首先,为了完成这个工作,在正确的时区内需要一个TIMESTAMP WITH ZONE数据类型。然后,如果你将关键字AT TIME ZONE应用到那个值,它就会自动地调整为新的时区和日期。

  select (timestamp '2003-04-06 01:59:59' at time zone 'PDT') at time zone 'GMT'   from dual;

  06-APR-03 08.59.59.00000000 AM GMT

这个语句将为太平洋白天时间(即其切换到PST之前的时刻)构造一个TIMESTAMP WITH TIME ZONE然后再将其转换到GMT。AT TIME ZONE关键字也接受默认的偏移值语法:

  select (timestamp '2003-04-06 02:00:00' at time zone '-07:00') at time zone   '00:00' from dual;

  06-APR-03 09.00.00.000000000 AM +00:00  

你还可以使用伪字段来自动调整当前会话的时区:

     select current_timestamp at time zone dbtimezone from dual;

上面的表达式返回一个当前会话的本地时间(数据类型为时区),重新调整数据库的时区,调整后的时区将与SYSTIMESTAMP的结果相等。有了以上的这些信息,就可以构造一个比较好的NEW_TIME函数:

    create or replace function my_new_time (p_dwtz timestamp with time zone,     p_tz varchar2   ) return date is

  begin

    return cast(p_dwtz at time zone p_tz as date);   

end

my_new_time;

/

show errors;

select my_new_time(sysdate,'+08:00') from dual;

即使第一个参数被标记为一个timestamp with time zone,你依然可以传入一个TIMESTAMP和DATE,这样由于Oracle的自动转型操作,得到的时间将是会话在本地时区的当前时间。这个函数接受包括偏移值在内的任何可以被TIMESTAMP识别的时区,然后将接受的时区调整为正确的值。

4、Oracle/Sqlserver中的日期函数(节选)(35).系统时间

S:select getdate() value

O:select sysdate value from dual

(36).前后几日

直接与整数相加减

(37).求日期

S:select convert(char(10),getdate(),20) value

O:select trunc(sysdate) value from dual

select to_char(sysdate,'yyyy-mm-dd') value from dual

(38).求时间

S:select convert(char(8),getdate(),108) value

O:select to_char(sysdate,'hh24:mm:ss') value from dual

(39).取日期时间的其他部分

S:DATEPART 和 DATENAME 函数 (第一个参数决定)

O:to_char函数 第二个参数决定

参数---------------------------------下表需要补充

year yy, yyyy

quarter qq, q (季度)

month mm, m (m O无效)

dayofyear dy, y (O表星期)

day dd, d (d O无效)

week wk, ww (wk O无效)

weekday dw (O不清楚)

Hour hh,hh12,hh24 (hh12,hh24 S无效)

minute mi, n (n O无效)

second ss, s (s O无效)

millisecond ms (O无效)

----------------------------------------------

(40).当月最后一天

S:不知道

O:select LAST_DAY(sysdate) value from dual

(41).本星期的某一天(比如星期日)

S:不知道

O:SELECT Next_day(sysdate,7) vaule FROM DUAL;

(42).字符串转时间

S:可以直接转或者select cast('2004-09-08'as datetime) value

O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;

(43).求两日期某一部分的差(比如秒)

S:select datediff(ss,getdate(),getdate()+12.3) value

O:直接用两个日期相减(比如d1-d2=12.3)

SELECT (d1-d2)*24*60*60 vaule FROM DUAL;

(44).根据差值求新的日期(比如分钟)

S:select dateadd(mi,8,getdate()) value

O:SELECT sysdate+8/60/24 vaule FROM DUAL;

(45).求不同时区时间

S:不知道

O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;

-----时区参数,北京在东8区应该是Ydt-------

AST ADT 大西洋标准时间

BST BDT 白令海标准时间

CST CDT 中部标准时间

EST EDT 东部标准时间

GMT 格林尼治标准时间

HST HDT 阿拉斯加 夏威夷标准时间

MST MDT 山区标准时间

NST 纽芬兰标准时间

PST PDT 太平洋标准时间

YST YDT YUKON标准时间

5、redhat9终端方式下更改时区偶曾经问过的问题现在仍有兄弟在问特整理了一下

由于redhat9不能象以前那样配置时区。经常会出现错误

没图形界面!

/usr/sbin/timeconfig

错误如下

......

用 redhat-config-time 要求有xwin :redhat-config-date requires a currently running X server.

所以更改时区可以使用 tzselect這个指令,來修改你的时区

当然你也可不用命令,如果习惯文件修改的话

可修改/etc/sysconfig/clock

ZONE=Asia/Shanghai ( 查/usr/share/zoneinfo 下面的文件。 )

UTC=false ( 硬件时钟是否为 UTC 或者说 GMT 时钟。 )

ARC=false (如果是在 Alpha 机器上,则设置为 true 。 )

(把硬件时钟设置为 UTC 的好处就是他能自动设置夏时制,缺点时,在安装有多重操作系统启动的机器上,在另外的操作系统上时钟会错误。 )

根据自己的需要选你所在时区后,然后

rm /etc/localtime

是以上海为例的哦

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

重起机器后时区就改变了 。

如果你在某些应用下面的时间是错误的,那么你在运行 Red Hat Linux 5.0 或 5.1,解决的办法是建立 /usr/lib/zoneinfo 到 /usr/share/zoneinfo 的符号连接:

ln -s /usr/share/zoneinfo /usr/lib/zoneinfo

时区 与 UTC 的偏移量 描述

NZDT +13:00 新西兰白昼时间(夏时制)

IDLE +12:00 国际日期变更线,东边

NZST +12:00 新西兰标准时间

NZT +12:00 新西兰时间

AESST +11:00 澳大利亚东部标准夏时制

ACSST +10:30 中澳大利亚标准夏时制

CADT +10:30 中澳大利亚夏时制

SADT +10:30 南澳大利亚夏时制

AEST +10:00 澳大利亚东部标准时间

EAST +10:00 东澳大利亚标准时间

GST +10:00 关岛标准时间,(USSR Zone 9?)

LIGT +10:00 澳大利亚墨尔本

ACST +09:30 中澳大利亚标准时间

CAST +09:30 中澳大利亚标准时间

SAT +9:30 南澳大利亚标准时间

AWSST +9:00 澳大利亚西部标准夏时制

JST +9:00 日本标准时间,(USSR Zone 8)

KST +9:00 韩国标准时间

WDT +9:00 西澳大利亚夏时制

MT +8:30 毛里求斯时间(?)

AWST +8:00 澳大利亚西部标准时间

CCT +8:00 中国沿海时间

WADT +8:00 西澳大利亚夏时制

WST +8:00 西澳大利亚时间

JT +7:30 爪哇时间(译注:这里的 Java 可不是语言)

WAST +7:00 西澳大利亚标准时间

IT +3:30 伊朗时间

BT +3:00 巴格达时间

EETDST +3:00 东欧夏时制

CETDST +2:00 中欧夏时制

EET +2:00 东欧,(USSR Zone 1)

FWT +2:00 法国冬时制

IST +2:00 以色列标准时间

MEST +2:00 中欧夏时制

METDST +2:00 中欧白昼时间

SST +2:00 瑞典夏时制

BST +1:00 英国夏时制

CET +1:00 中欧时间

DNT +1:00 Dansk Normal Tid(?)

DST +1:00 Dansk Standard Time (?)

FST +1:00 法国夏时制

MET +1:00 中欧时间

MEWT +1:00 中欧冬时制

MEZ +1:00 中欧时区

NOR +1:00 挪威标准时间

SET +1:00 Seychelles Time(?)

SWT +1:00 瑞典冬时制

WETDST +1:00 西欧光照利用时间(夏时制)

GMT 0:00 格林威治平均时间

WET 0:00 西欧

WAT -1:00 西非时间

NDT -2:30 纽芬兰(新大陆)白昼时间

ADT -03:00 大西洋白昼时间

NFT -3:30 纽芬兰(新大陆)标准时间

NST -3:30 纽芬兰(新大陆)标准时间

AST -4:00 大西洋标准时间(加拿大)

EDT -4:00 东部白昼时间

ZP4 -4:00 GMT +4 小时

CDT -5:00 中部白昼时间

EST -5:00 东部标准时间

ZP5 -5:00 GMT +5 小时

CST -6:00 中部标准时间

MDT -6:00 山区白昼时间(译注:Mountain Daylight Time那位知道怎么译?)

ZP6 -6:00 GMT +6 小时

MST -7:00 山区标准时间

PDT -7:00 太平洋白昼时间

PST -8:00 太平洋标准时间

YDT -8:00 Yukon 白昼时间

HDT -9:00 夏威仪/阿拉斯加白昼时间

YST -9:00 Yukon 标准时间

AHST -10:00 夏威仪-阿拉斯加标准时间

CAT -10:00 中阿拉斯加时间

NT -11:00 州时间(Nome Time)

IDLW -12:00 国际日期变更线,西边

-----------英文版--老版本,歧视性,没有中国大陆,抗议!!!----

常用的几个时区:

GMT:Greenwich Mean Time

ET:U.S. Eastern Time -5

PST:Pacific Standard Time -8

GMT -11:00 Samoa

GMT -10:00 U.S. Hawaiian Time

GMT -09:30 Marquesas

GMT -09:00 U.S. Alaska Time

GMT -08:30 Pitcarn

GMT -08:00 Pacific Time

GMT -07:00 U.S. Mountain Time

GMT -07:00 U.S. Mountain Time (Arizona)

GMT -06:00 U.S. Central Time

GMT -06:00 Mexico

GMT -05:00 U.S. Eastern Time

GMT -05:00 U.S. Eastern Time (Indiana)

GMT -05:00 Columbia, Peru, South America

GMT -04:00 Atlantic Time

GMT -03:30 Newfoundland, Canada

GMT -03:00 Argentina

GMT -03:00 Brazil

GMT -02:00 Mid-Atlantic

GMT -01:00 Azores

GMT U.K., Spain

GMT +01:00 Western Europe

GMT +02:00 Eastern Europe

GMT +02:00 Egypt

GMT +02:00 Israel

GMT +03:00 Russia

GMT +03:00 Saudi Arabia

GMT +03:30 Iran

GMT +04:00 Arabian

GMT +04:30 Afghanistan

GMT +05:00 Pakistan, West Asia

GMT +05:30 India

GMT +06:00 Bangladesh, Central Asia

GMT +06:30 Burma

GMT +07:00 Bangkok, Hanoi, Jakarta

GMT +08:00 China, Taiwan

GMT +08:00 Singapore

GMT +08:00 Australia (WT)

GMT +09:00 Japan

GMT +09:00 Korea

GMT +09:30 Australia (CT)

GMT +10:00 Australia (ET)

GMT +10:30 Australia (Lord Howe)

GMT +11:00 Central Pacific

GMT +11:30 Norfolk Islands

GMT +12:00 Fiji, New Zealand

6、JAVA中的时区

java.util 类 TimeZonejava.lang.Object

java.util.TimeZone

所有已实现的接口:

 

Serializable, Cloneable
直接已知子类:
SimpleTimeZone

 

public abstract class TimeZone

extends Object
implements Serializable, Cloneable

 

 

TimeZone

表示时区偏移量,也可以计算夏令时。

通常,使用

getDefault

获得

TimeZone

getDefault

基于程序运行所在的时区创建

TimeZone

。例如,对于在日本运行的程序,

getDefault

基于日本标准时间创建

TimeZone

对象。

也可以用

getTimeZone

及时区 ID 获取

TimeZone

。例如美国太平洋时区的时区 ID 是 "America/Los_Angeles"。因此,可以使用下面语句获得美国太平洋时间

TimeZone

对象:

TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");

可以使用

getAvailableIDs

方法来对所有受支持的时区 ID 进行迭代。可以选择受支持的 ID 来获得

TimeZone

。如果想要的时区无法用受支持的 ID 之一表示,那么可以指定自定义时区 ID 来生成 TimeZone。自定义时区 ID 的语法是:

http://www.hi-pda.com/forum/archiver/tid-334908.html

http://www.soudie.net/top_27701_cat_21/

http://database.ccidnet.com/art/1105/20070115/1001341_1.html

http://www.cnblogs.com/zhangqh/archive/2005/09/08/232598.html

http://www.chinaunix.net/jh/4/468256.html

http://eyejava.javaeye.com/blog/29653

http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/TimeZone.html

 

<转:http://blog.163.com/ligurf@126/blog/static/2072230320079301572309/>

posted on 2012-12-22 15:40  快鸟  阅读(3676)  评论(0编辑  收藏  举报