Date和TimeZone的关系
java2平臺(tái)為我們提供了豐富的日期時(shí)間API。如java.util.Date;java.util.calendar;java.text.DateFormat等。那么它們之間有什么關(guān)系呢?
首先,java.util.Date代表一個(gè)時(shí)間點(diǎn),其值為距公元1970年1月1日 00:00:00的毫秒數(shù)。所以它是沒(méi)有時(shí)區(qū)和Locale概念的。java通過(guò)如下形式取得當(dāng)前時(shí)間點(diǎn):
Date now = new Date();? //這個(gè)時(shí)間點(diǎn)與本地系統(tǒng)的時(shí)區(qū)無(wú)關(guān)
而 正因?yàn)槠渑c時(shí)區(qū)的無(wú)關(guān)性,才使得我們的存儲(chǔ)數(shù)據(jù)(時(shí)間)是一致的(時(shí)區(qū)一致性)。一般的我們將now存儲(chǔ)于數(shù)據(jù)庫(kù)中,當(dāng)我們需要展現(xiàn)數(shù)據(jù)時(shí),將 now格式化成想要的格式,如:2011-11-19 14:12:23。而這個(gè)功能一般交由java.text.DateFormat來(lái)實(shí)現(xiàn)。例如:
SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");String?snow?=?sdf.format(now);??//?2011-11-19?14:12:23
?
我們發(fā)現(xiàn)snow是帶時(shí)間(14:12:23)的字符串,我們不禁要問(wèn),該時(shí)間(14:12:23)是哪個(gè)時(shí)區(qū)的時(shí)間?默認(rèn)情況 下,SimpleDateFormat 取得本地系統(tǒng)的時(shí)區(qū)(我的時(shí)區(qū)為GMT+8北京),然后按照pattern("yyyy-MM-dd HH:mm:ss")格式化now,此時(shí)輸出的就是GMT+8區(qū)的時(shí)間了。如果想支持國(guó)際化時(shí)間,則先指定時(shí)區(qū),然后再格式化date數(shù)據(jù)。例如:
?
SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String?snow?=?sdf.format(now);??//?2011-11-19?14:12:23
另外,你可以通過(guò)如下代碼修改本地時(shí)區(qū)信息:
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));?
java.util.Calendar類也代表時(shí)間點(diǎn),但它為Date的facade工具類,提供了很多對(duì)時(shí)間點(diǎn)到年、月、日、時(shí)、分、秒、星期等的轉(zhuǎn)換(計(jì)算)的方便方法。
?
Calendar?calendar?=?Calendar.getInstance(timezone);?Date?d?=?calendar.getTime();
Calendar 的計(jì)算也是基于時(shí)區(qū)的,例如:同一個(gè)date在不同時(shí)區(qū)下的小時(shí)數(shù)是不一樣的。但是calendar.getTime();返回的date是沒(méi)有時(shí)區(qū)的,因?yàn)樗荄ate類型的。例如:
?
public?static?void?main(String[]?args)?throws?InterruptedException?{??Calendar?calendar1?=?Calendar
????.getInstance(TimeZone.getTimeZone("GMT+8"));
??Calendar?calendar2?=?Calendar
????.getInstance(TimeZone.getTimeZone("GMT+1"));
??System.out.println("Millis?=?"?+?calendar1.getTimeInMillis());
??System.out.println("Millis?=?"?+?calendar2.getTimeInMillis());
??System.out.println("hour?=?"?+?calendar1.get(Calendar.HOUR));
??System.out.println("hour?=?"?+?calendar2.get(Calendar.HOUR));
??System.out.println("date?=?"?+?calendar1.getTime());
??System.out.println("date?=?"?+?calendar2.getTime());
?}
輸出:
Millis?=?1358614681203Millis?=?1358614681203
hour?=?3
hour?=?8
date?=?Thu?Nov?19?15:11:21?CST?2011
date?=?Thu?Nov?19?15:11:21?CST?2011
轉(zhuǎn)載于:https://www.cnblogs.com/cyblog-eastcn/p/4876512.html
總結(jié)
以上是生活随笔為你收集整理的Date和TimeZone的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎么利用人工智能技术提升泰山风景区的旅游
- 下一篇: 怎么利用虚拟现实技术展示泰山风景区的文化