当Y仉要国际化的时候,我们不得不考虑旉的问题。不同的地方有不同的时区Q从而显C的旉是不一L。而且很多国家在某一D|间还可能会实行夏令时Q显C的旉又不一栗ؓ了保证时间的正确性,必须有统一的基U,从而不得不考虑下列旉之间的{换?br> a、long timeToUTC(time,timezone) //把给定的旉Ҏl定的时{化ؓUTC
b、String UTCToTime(long,timezone) //把给定的UTC转化为制定时区的旉
c、timeToTime(time,timezone1,timezone2) //把给定的旉Ҏ制定的时{化ؓ另指定时区的旉
//考虑到数据的存储Q还必须考虑数据库对于时间字D늚格式?br>
二、解x?br> 昄旉的不同,主要原因的是时区不同。如果不考虑自定义时区的问题QJODA包就能很好解决上面的问题Q但是如果考虑自定义时区(很多软g׃考虑夏oӞ从而增加了自定义时区的功能来设|夏令时Q,则我们必自己来写{换函数?br> a、JODA
1
public long timeToUTC(String theSourceTime, int sourceWbxTZID)
2
throws Exception
{
3
DateTime targDate;
4
if (sourceWbxTZID == (-1))
{ //UTC
5
//mdyFormatter:org.joda.time.format.DateTimeFormatter
6
targDate = mdyFormatter.withZone(DateTimeZone.UTC).parseDateTime(theSourceTime);//
7
} else
{
8
targDate = mdyFormatter.withZone(
9
DateTimeZone.forID(convertTimezone(sourceWbxTZID)))
10
.parseDateTime(theSourceTime);
11
}
12
return targDate.getMillis();
13
}
14
public String UTCToTime(long theUTCTime, int targetWbxTZID)
15
throws Exception
{
16
DateTime theSourceTime = new DateTime(theUTCTime);
17
if (targetWbxTZID == (-1))
{
18
return mdyFormatter.withZone(DateTimeZone.UTC).print(theSourceTime);
19
} else
{
20
return mdyFormatter.withZone(
21
DateTimeZone.forID(convertTimezone(targetWbxTZID))).print(
22
theSourceTime);
23
}
24
}
b、自~写
1
/** *//**
2
*sourceDateQ需要{换的日期Q此日期必须是居于GMT的时间?br> 3
*timezoneQ?br> 4
*gMTQ是否是GMT旉
5
*isConsiderDayLightQ是否考虑夏o?br> 6
*/
7
private long convert(Date sourceDate, Timezone timezone, boolean gMT, boolean isConsiderDayLight) throws Exception
{
8
int gMTOffSet = (int) timezone.getGmtOffset();//获取偏移?/span>
9
long sourceTime = sourceDate.getTime();
10
if (gMT)
{
11
targetTime = sourceTime + gMTOffSet * 60 * 1000;
12
} else
{
13
targetTime = sourceTime + ( -1) * gMTOffSet * 60 * 1000;//北京偏移8个小Ӟ如是Q?8*60*1000
14
}
15
//下面是考虑夏o?/span>
16


17
return targetTime;
18
19
}
20
public long timeToUTC(String theSourceTime, int sourceWbxTZID)
21
throws Exception
{
22
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
23
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
24
Date date=sdf.parse(theSourceTime);
25
Timezone timezone=(Timezone)keyedByWbxTZID.get(String.valueOf(sourceWbxTZID));//此函C要是获取Timezone相关的数?/span>
26
return convert(date,timezone,false,true);
27
}
28
public String UTCToTime(long theUTCTime, int targetWbxTZID)
29
throws Exception
{
30
Date date=new Date();
31
date.setTime(theUTCTime);
32
Timezone timezone=(Timezone)keyedByWbxTZID.get(String.valueOf(targetWbxTZID));//此函C要是获取Timezone相关的数?/span>
33
long time=convert(date,timezone,true,true);
34
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
35
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
36
return sdf.format(new Date(time));
37
}
三、相关的一些时间概?nbsp;
GMT:是格林威治标准旉的英文羃写,格林威治是u敦泰晤士沛_岸的一个地方,׃?9世纪开始,因ؓ世界各国来往频繁Q而欧z大陆、美z大陆和亚洲大陆都有各自的时区,所以ؓ免乱,各国的代表就?884 q在国华盛召开了国际大会,通过协议选出伦敦的格林威治,作ؓ全球旉的中心点Q格林威L准时间因而诞生。所以有GMT功能的腕表就是说腕表拥有其中的小时表盘可以显CGMT旉?/p>
UTC:短L传送很q,可能l过许多国家、许多不同时区,所以需要有一l时间作标准Q?q个标准旉Co-ordinated Universal Time ~写UTC 或称 UT。过ȝ为格林威L_GMTQ,虽然有些地方有冬令时间或夏o旉Q但UTC旉是不会改的,大家都以它ؓ标准?/p>
DST:Daylight saving time .(夏oӞ各个国家开始和l束旉的计方法是不一L)
国Q加拿大夏o时v止时_每年3月䆾W二个星期天?1月䆾W一个星期天Q亚利桑那州、夏威夷、L多黎各、维京岛和美属萨摩亚除外Q?/p>
德国、意大利{多数欧z国家夏令时h旉Q每q?月䆾最后一个星期天?0月䆾最后一个星期天?/p>
MST:Mountain Standard Time
PST:Pacific Standard Time
EST:Eastern Standard Time
很多朋友对于剧官方|站上的旉表达方式不是很理解?br>q里说明一下,以Prison BreakZQMonday 8/7c
它指的是Q星期一 东部旉8?中部旉7炏V两地同时播放,不过因ؓ时差问题Q钟表上昄的时间有一个小时的差别?br>管官网的播放时间对于美国以外的朋友来说意义不大Q不q如果你愿意查出相对应的北京旉Q可以?a >http://www.worldtimeserver.com 的服务,我相信国内也有很多类似的旉转换|站Q包括googleQ百度都可以Q这里就不再|嗦了。至目前来_东旉和北京时间相?2时Q也是_我们比美东快12个小时。Prison Break的播放时间就是北京时间第二天的早?点,也就是星期二 8:00AM.
相对于美国,我们国家的时区划分相对简单很多,特别是取消夏令时后,不出国,我们基本上不用考虑时差问题?/p>
国本土大陆地区采用的时东向西ؓQ?br>东岸标准时区 (Eastern Standard Time; EST; UTC-5; R?Q包括大西洋沿岸各州、墨西哥湑֏密西西比河以东地区?
中部标准时区 (Central Standard Time; CST; UTC-6; S?Q包括密西西比河沿岸以及以西州䆾的大部䆾?
山部标准时区 (Mountain Standard Time; MST; UTC-7; T?, 沿大陆分水岭—洛矶山一U的州䆾、大盆地及科|拉多河l?
太^z标准时?(Pacific Standard Time; PST; UTC-8; U?Q包括太qx沿岸地区及内华达州?/p>
国本土大陆地区以外地区采用的时?br>阿拉斯加标准时区 (Alaska Standard Time; AKST; UTC-9; V? 包括阿拉斯加州大部䆾地区?
夏威夷—阿留申时区 (Hawaii-Aleutian Standard TimeQ非正式Q夏威夷标准?Hawaii Standard Time; HST; UTC-10; W?Q包括夏威夷州及169°30'W以西的阿留申岛?
国属土采用的时?br>大西z标准时?(Atlantic Standard Time; AST, UTC-4; Q? 包括波多黎各及美属处奛_?
萨摩亚时?(Samoa Standard Time; UTC-11, X?包括属萨摩亚?
查莫|时?(Chamorro Standard Time; UTC+10, Zone K)包括兛_及北马里亚纳岛?/p>
中国的时区:我们使用北京旉Q以前称中原标准旉Q现在台湾依然用这个名Uͼ是中国大陆、香港、澳門和台湄标准旉。在时区划分上,属东八区Q比世界协调时早8时Q记为UTC+8?/p>
严格地讲Q北京时间ƈ不是北京Q东l?16°Q地方的旉Q而是东经120°度地方的地方旉。而北京时间也不是在北京确定的Q而是׃于中国版囑և何中心位|陕西潼的中国U学院国家授时中心的9台铯原子钟和2台氢原子钟组通过_֯比对和计实玎ͼq过卫星与世界各国授旉门进行实时比寏V?/p>
清光l?8q_公元1902q_Q中国vx制定岸Ӟ以东l?20度之时刻为标准。公?912q_位于北京的中央观象台全国分Z个时区,民国28q??日中华民国内攉K召集标准旉会议Q确?912q划分之时区Z华民国标准时区。分别ؓ:
1昆仑时区 UTC+5.5 新疆襉K与部分西?br>2新藏时区 UTC+6 新疆及西?br>3陇蜀时区 UTC+7 中国中部
4中原标准时区 UTC+8 中国岸
5长白时区 UTC+9 中国东北
1949q之后,中国大陆?#8220;中原标准旉”改称“北京旉”Qƈ在全国统一使用该时间作为标准时间。台湑ֈl持“中原标准旉”之名Uͼ也有U?#8220;台北旉”?#8220;国家标准旉”?/p>
׃中国大陆全境都采用北京时间作为标准时Q因此在中国襉K的陕ѝ甘肃、新疆等省和自治区造成了生zM便,比如在乌鲁木齐,北京旉比当地时间提前两个小Ӟ北京旉??0分(中国大陆公务机关通行的上班时_相当于当地时间早??0分。作x施,一些新疆地区居民用乌鲁木齐时_即东六区QUTC+6Q时间?/p>
2005q_一些中华h民共和国全国人民代表大会代表提出中国大陆时区加以细分的Q提议分Z北京旉为基的东部时_UTC+8Q、以陕西地区旉为基的中部时_UTC+7Q和以新疆、西藏地区时间ؓ基础的西部时_UTC+6Q。后又将该提议改为分Z个时区,即UTC+8和UTC+7两个时区Q陕ѝ四川、重庆、贵州、云南及以西各省采用UTC+7的西部时间。但该提案尚未ʎ诸表冟?br>

]]>