文档章节

Java魔法堂:Date与日期时间格式化

达文西W
 达文西W
发布于 2017/07/26 09:36
字数 1158
阅读 6
收藏 0

二、 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

本文转载自:http://www.cnblogs.com/fsjohnhuang/p/4054715.html

达文西W

达文西W

粉丝 9
博文 29
码字总数 6991
作品 0
朝阳
程序员
私信 提问
java8中的时间处理0 - api介绍

Java 8 Date Time API是我们java开发一直寻找的时间处理工具。java从一开始设计的时间类就让人头疼,好在现在终于有了java8。 为什么我们需要这套API 只要是有这么几个理由: Java的日期和时...

davelet
2018/02/22
0
0
joda-time 时间处理工具

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kisscatforever/article/details/89240738 一、前言 说到java的时间处理,我们一般用到的有包里面的 和 类里面...

AresCarry
04/12
0
0
Java 8时间和日期API 20例

伴随lambda表达式、streams以及一系列小优化,Java 8 推出了全新的日期时间API,在教程中我们将通过一些简单的实例来学习如何使用新API。Java处理日期、日历和时间的方式一直为社区所诟病,将...

黄梦巍
2015/06/19
460
0
Java Date 和 Calendar

Java 语言的Date(日期),Calendar(日历),DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分,所有的开发者都应该能够计算未来的日期,定...

长平狐
2013/01/06
108
0
Java 8新的时间日期库的20个使用示例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。Java对日期,日历及时间的...

清尘V
2015/03/17
204
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
59
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部