2、 java.util.Date类 html
// 当前日期时间 Date now = new Date(); /* 因为程序的默认时区不一样,可能显示以下内容: * 1. 格林尼治时间,Tue Oct 28 01:24:14 GMT 2014 * 2. 美国中部标准时间,Tue Oct 27 23:24:14 GST 2014 */ System.out.println(now);
从上面的示例能够知道除了 java.util.Date类 外咱们还要了解时区 java.util.TimeZone 这个类才能获得须要的日期信息。java
3、 java.util.TimeZone类 app
示例1:spa
// 获取默认时区(最初始时由JVM决定的) TimeZone defaultTZ = TimeZone.getDefault(); // 显示sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] System.out.println(defaultTZ);
示例2:.net
// 设置东八区为当前时区 TimeZone e8 = TimeZone.getTimeZone("GMT+8"); TimeZone.setDefault(e8); // 显示sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] System.out.println(TimeZone.getDefault())
TimeZone.getTimeZone() 的入参为时区ID,能够经过 TimeZone.getAvaliableIDs() 可获取可用的时区ID。 code
好了,如今咱们有了日期时间源数据就能够着手格式化了。orm
4、 Java代码中的日期时间格式化 htm
1. java.text.SimpleDateFormat extends java.text.DateFormat 对象
做用:经过实例的 format() 方法将日期对象( java.util.Date )格式化为文本,经过 parse() 方法将文本解析为日期对象( java.util.Date )。blog
注意:在经过 SimpleDateFormat sdf = new SimpleDateFormat() 实例化时,会以当前的默认时区做为后续格式化、解析操做的时区,即便后续代码中从新设置默认时区也不会影响 SimpleDateFormat实例 的时区值。
// 初始化时设置 日期和时间模式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); // 修改日期和时间模式 sdf.applyPattern("yyyy/MM/dd HH:mm:ss.SSS") sdf.format(new Date());
查看源码会发现其实 java.text.SimpleDateFormat 内部使用了 java.util.Calendar 来获取 java.util.Date实例 的时分秒等部分,并进行格式化处理。
2. java.text.DateFormat
做用:内置了多种与特定的 DateFormatSymbols对象 绑定的formatter对象(也就是预设了日期时间模式)。
好处:方便对日期时间进行本地化。
缺点:没法直接修改日期时间模式。
其内部是使用 java.text.SimpleDateFormat 来处理格式化的
3. java.util.Calendar
做用:用于萃取日期时间中的年、月、日、时、分、秒等信息,至于格式化就有咱们本身解决了。它有一个好处就是在初始Calendar实例时能够设置使用的TimeZone。
Date date = new Date(); Calendar c1 = Calendar.getInstance(TimeZone.getTimeZone("GMT+8")); c1.set(date); cl.get(Calendar.YEAR); cl.get(Calendar.MONTH); cl.get(Calendar.DATE);
5、JSTL中的日期时间格式化
<fmt:formatDate/> 示例:
<% Date now = new Date(); %> <%-- 使用自定义日期时间模式来格式化 --%> <fmt:formatDate value="${now}" timeZone="GMT+8" type="date" pattern="MM-dd"/> <%-- 采用内置的日期时间模式来格式化 --%> <fmt:formatDate value="${now}" timeZone="GMT+8" dateStyle="short"/
<fmt:parseDate/> 示例:
<%-- 结果输出到JspWriter中 --%> <fmt:parseDate value="2005/12/21" pattern="yyyy/MM/dd"/
6、再横向理解
到这里你们应该可经过 SimpleDateFormat实例 来格式化日期时间了,但总以为 java.text.DateFormat 很差理解。下面介绍的 java.util.Locale 和 java.text.DateFormatSymbols 应该能够帮助你们更好去理解。
1. java.util.Locale
做为标识来表明特定地理位置、政治、文化区域。当某操做须要与特定的地理位置、政治、文化区域关联时,咱们称其为locale-sensitive。(如处理货币、日期)<Br/>
`Locale`由“语言码(language code)”和“地区码(country code)”、“补充码(variant 入参)”组成,其中“地区码(country code)”和“补充码(variant 入参)”为可选。
语言码(language code),由两个小写字母组成,如zh, en。命名规范:http://www.loc.gov/standards/iso639-2/englangn.html
地区码(country code),由两个大写字母组成,如CN,US。命名规范:http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
补充码(variant 入参),因为是规范以外的选项,所以没有严格的格式规定,只规定多个值时,经过下划线(_)链接各值便可。
各种型的码采用下滑线(_)链接构成完整的Locale。
Locale示例(“语言码(language code)”+“地区码(country code)”): zh_CN 。
能够自定义Locale对象,也可直接使用`java.util.Locale`内置的Locale对象。、
2. java.text.DateFormatSymbols
封装了根据Locale对象来对日期时间本地化资源的操做。通常不直接使用该类,而是经过 DateFormat.getDateInstance() 等方法来获取内置的formatter对象,该formatter对象已经绑定特定的 DateFormatSymbols对象
7、总结
上述内容只是引子,结合练习和源码才能有所深刻哦!
尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4054715.html ^_^肥仔John
8、参考
http://blog.csdn.net/sz_bdqn/article/details/2847589
http://blog.sina.com.cn/s/blog_6d818993010156zn.html
http://www.wanho.net/java/javanews/314.html