Java魔法堂:Date与日期时间格式化
一、前言
日期时间的获取、显示是每个程序都会涉及到的,下面是一些记录以便日后查阅。
二、 java.util.Date类
// 当前日期时间
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.util.TimeZone类
示例1:
// 获取默认时区(最初始时由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:
// 设置东八区为当前时区
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。
好了,现在我们有了日期时间源数据就可以着手格式化了。
四、 Java代码中的日期时间格式化
1. java.text.SimpleDateFormat extends java.text.DateFormat
作用:通过实例的 format() 方法将日期对象( java.util.Date )格式化为文本,通过 parse() 方法将文本解析为日期对象( java.util.Date )。
注意:在通过 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);
五、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"/
六、再横向理解
到这里大家应该可通过 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对象
七、总结
上述内容只是引子,结合练习和源码才能有所深入哦!
尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4054715.html ^_^肥仔John
八、参考
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
Java魔法堂:Date与日期时间格式化的更多相关文章
- Springboot 关于日期时间格式化处理方式总结
项目中使用LocalDateTime系列作为DTO中时间的数据类型,但是SpringMVC收到参数后总报错,为了配置全局时间类型转换,尝试了如下处理方式. 注:本文基于Springboot2.x测试, ...
- Java 日期时间格式化
在此记录Java日期时间格式化转换符,方便以后有需要时查找. 1.日期格式化 2.时间格式化 3.格式化常见的日期时间组合
- 【转】Java魔法堂:String.format详解
Java魔法堂:String.format详解 目录 一.前言 二.重载方法 三.占位符 四.对字符.字符串进行格式化 五.对整数进行格式化 六. ...
- PHPCMS V9调用时间标签 |日期时间格式化
PHPCMS V9 如何调用时间标签,下面分享常见的调用时间标签 |日期时间格式化 1.日期时间格式化显示: a标准型:{date('Y-m-d H:i:s', $rs['inputtime'])} ...
- Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式
Eclipse 改动凝视的 date time 日期时间格式,即${date}变量格式 找到eclipse安装文件夹以下的plugins文件夹,搜索 org.eclipse.text ,找到一个jar ...
- JavaScript日期时间格式化函数
这篇文章主要介绍了JavaScript日期时间格式化函数分享,需要的朋友可以参考下 这个函数经常用到,分享给大家. 函数代码: //格式化参数说明: //y:年,M:月,d:日,h:时,m分,s:秒, ...
- js -- 日期时间格式化
/** * js日期时间格式化 * @param date 时间读对象 * @param format 格式化字符串 例如:yyyy年MM月dd日 hh时mm分ss秒 * @returns {stri ...
- Java魔法堂:类加载器入了个门
一.前言 <Java魔法堂:类加载机制入了个门>中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理.本文将记录加载阶段的核心组件——类加载器的相关信息,以便日 ...
- Java魔法堂:打包知识点之jar
一.前言 通过eclipse导出jar包十分方便快捷,但作为码农岂能满足GUI的便捷呢?所以一起来CLI吧! 二.JAR包 JAR包是基于ZIP文件格式,用于将多个.java文件和各种资源文件, ...
随机推荐
- HTML5手机APP开发入(5)
HTML5手机APP开发入(5) 回顾一下 HTML5手机APP开发入(4) 如何自定义Component,directive HTML5手机APP开发入(3) 如何实现MVC的代码重构,自定义一个P ...
- android sdk
android sdk 网站 为什么google 的网站都上不去. http://www.androiddevtools.cn/
- Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)
File:Intrinsics头文件 描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名 File 描述 VS VisualStudio ...
- arcgis手动启动服务提示端口4000被使用
具体解决办法 参考 http://hi.baidu.com/xjx19860908/item/6b46376d92044694c4d249f6该博文. 手动启动,提示4000端口被占用,去查找4000 ...
- mysql设置连接超时时间参数:wait_timeout
[root@ ~]# mysql -h 192.168.0.* -uroot -pEnter password: Welcome to the MySQL monitor. Commands end ...
- 最近读的javascript,一些文章
本帖子是记录一些javascript的一些文章: 1. 理解node.js 2.异步编程 http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF% ...
- HDU 4762 Cut the Cake(公式)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- 中国的 Android:尚未发掘的应用市场?
作者: Wendy Boswell 本周,中国的搜索引擎公司百度最新公布的一篇报告介绍了中国 Android 用户的移动趋势. 下面是一些有价值的统计数据: 眼下在中国,每天的 Android 活跃用 ...
- 【jquery】基于 jquery 实现 ie 浏览器兼容 placeholder 效果
placeholder 是 html5 新增加的属性,主要提供一种提示(hint),用于描述输入域所期待的值.该提示会在输入字段为空时显示,并会在字段获得焦点时消失.placeholder 属性适用于 ...
- 【C#】剪切出图片的一部分
, , , ); Bitmap bmpNew = bmpBase.Clone(rect, bmpBase.PixelFormat); // 画像をGIF形式で保存 string ...