我们在操作数据库或者设计系统的时候,不可避免会和Date(时间)打交道。java的类库为我们提供了简单实用的Date类的操作。
相信大家在网上也可以 找到很多很多关于此类的文章,我也是借鉴了一些文章根据自己的代码实践得到了一些结论。是对Date类最简单而且非常实用的利用。
(1)首先我先来讲讲Date类,说是Date类并不能是非常准确的,我们可以在java的类库中找到两个Date类。分别是java.util.Date和java.sql.Date。这两个类看起来很接近,但是作用并不相同,而且都和我们的开发有着许多关联。
(2)刚才我说了java.util.Date和java.sql.Date这两个类,现在我想讲讲他们两个的相同点。首先java.sql.Date集成了java.util.Date类。所以java.sql.Date中的一些方法使用的是其超类(java.util.Date)中的方法。那么java.sql.Date到底有什么作用呢?下面我想用一些代码来解释一下
java.sql.Date getDate(int columnIndex) throws SQLException;
java.sql.Time getTime(int columnIndex) throws SQLException;
这是接口ResultSet中的两个方法,说到ResultSet,大家肯定都不陌生。刚开始我们操作数据库的时候从数据库中获取数据的时候都和它打了很多的交道。
Class.forName("com.mysql.jdbc.Driver");
String username="root";
String password="root";
String url="jdbc:mysql://localhost:3306/eg"
Connection conn = DriverManager.getConnection(url,password,username);
Statement state=conn.createStatement();
当然,我们的数据库提供了时间的存储。当我们想要从数据库中通过getTime()方法获取时间的时候。得到的其实java.sql.Date类对象。
下面我来说说怎样实现Date类的一些简单操作。
首先我们想获取系统时间,这是很简单的,只需要一行代码
Date date =new Date();
我们可以做一下输出,用的是Date类内置的toString()方法。
Sat Feb 03 18:40:40 CST 2018
当然我们可以设置输出的时间的格式,让它需要成为我们最需要的格式。这就DateFormat这个抽象类了,并使用它的实现类
SimpleDateFormat进行实例化。
DateFormat df = new SimpleDateFormat("yyyy-MM-DD hh:mm:ss");
调用的是其有参构造方法,入参为输出的时间的格式。具体这个入参的设置方式我这里有一个表格,大家可以做一个参照。
字母 日期或时间元素 表示 示例
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
这样我们就可以按照我们要求的格式对Date类进行修改了。
接下来我要说的是java.util.Date类和String类的修改,这也是接着上面来看的。同样需要调用df对象的两个方法。
首先是Date类-------->String类
String dateStr = df.format(date);
输出的结果如下:
2018-02-34 06:40:40
接下来是String类-------->Date类
dateStr = "2018-02-03 15:08:06";
date = df.parse(dateStr);
这里我要进行一下说明,String类的设置是要和df对象中入参的时间格式相同的,否则转换将会失败,系统会抛出一个异常
ParseException。
输出结果
Wed Jan 03 15:08:06 CST 2018
------------------------------------------------------------------------------------------------------------------------
接下来我来讲讲一个java.util.Date类和java.sql.Date类的相互转换。
(1)java.util.Date->java.sql.Date
java.sql.Date是没有无参构造方法的,只有一个public Date(long date);这个方法。所以这个转换是比较容易的
java.util.Date uDate = new java.util.Date();
System.out.println(uDate);
java.sql.Date sDate =new java.sql.Date(uDate.getTime());
正如代码所示
输出结果:
Sat Feb 03 18:40:40 CST 2018
2018-02-03
(2)java.sql.Date--->java.util.Date
这也是类似的,通过java.util.Date的一个有参构造方法.
DateFormat df = new SimpleDateFormat("yyyy-MM-DD hh:mm:ss");
uDate = new java.util.Date(sDate.getTime());
System.out.println(df.format(uDate));
输出结果:
2018-02-34 06:40:40
这些就是关于Date类的一些实用的小工具,大家可以进行练习和参考。下面是我的代码
package com.xt.managedsystem.filter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 字母 日期或时间元素 表示 示例
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
* @author Administrator
*
*/
public class DateTest {
public static void main(String[] args) throws ParseException{
//----Date类和String的相互转化-----
Date date =new Date();
System.out.println(date);
DateFormat df = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
String dateStr = df.format(date);
System.out.println(dateStr);
dateStr = "2018-02-03 15:08:06";
date = df.parse(dateStr);
System.out.println(date);
System.out.println("--------------");
convertTest();
}
//---------java.sql.Date和java.util.Date类的相互转化
public static void convertTest(){
//------java.util.Date->java.sql.Date
java.util.Date uDate = new java.util.Date();
System.out.println(uDate);
java.sql.Date sDate =new java.sql.Date(uDate.getTime());
System.out.println(sDate);
//-------------java.sql.Date--->java.util.Date
DateFormat df = new SimpleDateFormat("yyyy-MM-DD hh:mm:ss");
uDate = new java.util.Date(sDate.getTime());
System.out.println(df.format(uDate));
}
}