一、java中日期类之间的关系:
其中:
1):java.sql.Date、java.sql.Time和java.sql.Timestamp这三个类是专门和数据库打交道的,它们都是java.util.Date的子类。
java.sql.Date继承了java.util.Date的日期部分(年月日)。
java.sql.Time继承了java.util.Date的时间部分(时分秒)。
java.sql.Timestamp全部继承了java.util.Date(年月日时分秒毫秒)。
2):对于日期的格式化我们使用java.text.DateFormat,我们最常用的是使用
它的子类java.text.simpleDateFormat。
3):如果想知道已知的Date是一年中的第一天、一月中的第几日、一周中的星期几等等。即这是我们要知道已知Date的日历。我们可以使
用java.util.Caleadar类处理。对已处理各种各样时区的日历,我们需要使用java.util.GregorianCalendar类
(格林威治日历)。
4):如果我们已经知道了当前时区的Calendar,想知道其他时区的Calendar,这时我们就需要java.util.Timezone类。即使用Calendar类的
setTimeZone(TimeZone
value)
方法。
二、从数据库中获取日期
1、将从数据库中得到日期格式化为自定义的日期格式
//此处从数据库得到的date是java.sql.Date类型(只保存了日期信息)
Date sendDate =
rs.getDate("send_date");
SimpleDateFormat sdf =
new
SimpleDateFormat("yyyy年MM月dd日");
System.out.println(sdf.format(sendDate));
//结果样式为:2012年09月26日
######################################################
new
SimpleDateFormat("yyyy年MM月dd日")改为:
new SimpleDateFormat("HH小时mm分钟ss秒")
那么结果样式始终为:00小时00分钟00秒
这是因为java.sql.Date类型只保存了日期的信息(年月日)没有保存时间信息(时分秒)
2.从数据库中得到日期中获取具体的年或月或日
//此处从数据库得到的date是java.sql.Date类型
Date sendDate =
rs.getDate("send_date");
//得到当前时间的日历
Calendar cal
= Calendar.getInstance();
//将从数据库中得到的date转为Calendar,setTime(arg)方法中的参数是java.util.Date类型,而java.sql.Date是java.util.Date的子类
cal.setTime(sendDate);
//得到具体的月(这里的月是从0开始的)
int month =
cal.get(Calendar.MONTH);
System.out.println(month+1);
//此处从数据库得到的date是java.sql.Timestamp类型(日期和时间信息都保存了)
Timestamp sendDate = rs.getTimestamp("send_date");
SimpleDateFormat sdf = new SimpleDateFormat("HH小时mm分钟ss秒");
System.out.println(sdf.format(sendDate));
--------------------------------------------------------
或者
//此处从数据库得到的date是java.sql.Time类型(只保存了时间信息)
Time sendDate = rs.getTime("send_date");
SimpleDateFormat sdf = new SimpleDateFormat("HH小时mm分钟ss秒");
System.out.println(sdf.format(sendDate));
//结果样式为:08小时48分钟37秒
4、得到当前系统的日期时间
a:将毫秒数换转成日期类型
Long time=System.currentTimeMillis();
Date dNow=new Date(time);
System.out.println("日期类型:"+dNow);
//当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。通常用在计算程序执行了多长时间。
b:
java.util.Date date = new java.util.Date();
//将当前date转为Calendar
cal.setTime(date);
//得到具体的月(注意:月是从0开始计算的)
int month = cal.get(Calendar.MONTH);
//Date是java.util.Date包下的,它包含了日期信息和时间信息,由于此类中很多方法都过时了,可以先将Date类型转换为Calendar类型,在获取日期时间信息。
c:
Calendar cal = Calendar.getInstance();
//此calendar是java.util.Calendar包下的,它拥有很多方法可以获取日期和时间信息。
d:取得指定时区的日期时间
Calendar japanTime= new GregorianCalendar(TimeZone.getTimeZone("Japan")); System.out.println(japanTime.get(Calendar.HOUR_OF_DAY));
//结果是:22
说明:TimeZone.getTimeZone("Japan")中Japan是TimeZone的ID,如果你想知道所有可用的TimeZone的ID,可以使用下面的语句获取:
for(String str :TimeZone.getAvailableIDs())
System.out.println(str);
三、将从页面取得的字符串日期转换为日期类型(保存到数据库)
1、 //假设strDate 是从页面得到的日期
String strDate = "2013-06-13 08:16:30";
Timestamp tm = Timestamp.valueOf(strDate);
System.out.println(tm);//结果是:2013-06-13 08:16:30.0
同理:java.sql.Date和java.sql.Time都有valueOf(String arg)方法
2、
//假设strDate 是从页面得到的日期
String strDate = "2013-06-13 08:16:30";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date date = sdf.parse(strDate);
System.out.println(date);
//结果是:Thu Jun 13 08:16:30 CST 2013
时间格式语法:
使用一个 time pattern 字符串指定时间格式。 在这种方式下,所有的 ASCII 字母被保留为模式字母,定义如下:
符号 含义 表示 示例
------ ------- ------------ -------
G 年代标志符 (Text) AD
y 年 (Number) 1996
M 月 (Text & Number) July & 07
d 日 (Number) 10
h 时 在上午或下午 (1~12) (Number) 12
H 时 在一天中 (0~23) (Number) 0
m 分 (Number) 30
s 秒 (Number) 55
S 毫秒 (Number) 978
E 星期 (Text) Tuesday
D 一年中的第几天 (Number) 189
F 一月中第几个星期几 (Number) 2(2nd Wed inJuly)
w 一年中第几个星期 (Number) 27
W 一月中第几个星期 (Number) 2
a 上午 / 下午 标记符 (Text) PM
k 时 在一天中 (1~24) (Number) 24
K 时 在上午或下午 (0~11) (Number) 0
z 时区 (Text) Pacific Standard Time
' 文本转义符 (Delimiter)
'' 单引号 (Literal) '
模式字母的数目决定了格式。
下面使一些实例:
格式化模式 结果
-------------- -------
"yyyy.MM.dd G 'at' hh:mm:ss z" ->> 1996.07.10 AD at 15:08:56 PDT
"EEE, MMM d, ''yy" ->> Wed, July 10, '96
"h:mm a" ->> 12:08 PM
"hh 'o''clock' a,zzzz"->>12 o'clock PM,Pacific Daylight Time
"K:mm a, z" ->> 0:00 PM, PST
"yyyyy.MMMMM.dd GGG hh:mm aaa" ->> 1996.July.10 AD 12:08 PM
更多精彩请参阅:Java日期格式化及其使用例子收集