日期格式处理

一、String类型的时间转换为Date类型
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date time=null;
try {
time=sdf.parse(sdf.format(new Date()));
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println(time);//输出Wed Jun 03 00:00:00 CST 2015

二、Calendar
java.util.Calendar c=java.util.Calendar.getInstance(); //可以对每个时间域单独修改
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH)+1; //月份需要加1才是正确的,因为月份从0开始
int day=c.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+day);

c.set(Calendar.MONTH, 3);//在原来基础上加3个月,月份从0开始算的
c.getTime(); //日历转换为日期类

int w=c.getActualMaximum(Calendar.WEEK_OF_MONTH);//一个月中最大的周数

Date d=java.util.Calendar.getInstance().getTime(); //获取当前时间
System.out.println(d); //输出Wed Jun 03 18:14:05 CST 2015
System.out.println(d.toLocaleString());//输出2015-6-3 18:14:05
三、getTime介绍
1、基本概念
getTime 方法返回一个整数值,这个整数代表了从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数;
负数代表 1970 年之前的日期;
在进行各种日期和时间换算的时候,可以定义一些变量来表示一天、一个小时或一分钟中包含的毫秒数:
var minute = 1000 * 60
var hour = minute * 60
var day = hour * 24

例子:当前距1970-1-1多少天
java.util.Date date=new java.util.Date();
long minute = 1000 * 60;
long hour = minute * 60;
long day = hour * 24;
System.out.println(Math.round(date.getTime()/day)+" days since 1970");


2、地域不同会相差几小时,像中国其实是从1970-1-1- 8:00:00开始算的

四、二种Date相互转化: 都能被SimpleDateFormat格式化
1、java.sql.Date转为java.util.Date
java.sql.Date date=new java.sql.Date(0);
java.util.Date d=new java.util.Date(date.getTime());
System.out.println(d);

SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS");
String str=format.format(d);
System.out.println(str);
结果:
Thu Jan 01 08:00:00 CST 1970
1970-01-01 08:00:00:0000

2、java.util.Date转为java.sql.Date
java.util.Date date=new java.util.Date(); //系统当前日期
java.sql.Date d=new java.sql.Date(date.getTime());
java.sql.Time t=new java.sql.Time(date.getTime());
java.sql.Timestamp ts=new java.sql.Timestamp(date.getTime());
System.out.println("Date:"+d);
System.out.println("Time:"+d);
System.out.println("Timestamp:"+d);
System.out.println("=====格式化后的值=====");
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSSS");
String str1=format.format(d);
String str2=format.format(t);
String str3=format.format(ts);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
结果:
Date:2015-06-19
Time:2015-06-19
Timestamp:2015-06-19
=====格式化后的值=

====
2015-06-19 09:16:56:0894
2015-06-19 09:16:56:0894
2015-06-19 09:16:56:0894

3、字符串格式化成日期类型
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Date d1=df.parse("2015-5-19");

4、比较二个日期相差多少天
public static void diff(Date d1,Date d2){
long diffDay=(d2.getTime()-d1.getTime())/(24*60*60*1000);//d2距离1970的毫秒数-d1距离1970的毫秒数/一天对应的毫秒数
System.out.println("二个日期相差的天数:"+diffDay);
}

public static void statistics(String s){
DateFormat df=new SimpleDateFormat("yyyy-MM-dd");
try {
Date d1=df.parse("2015-5-19");
diff(d1,new Date());
} catch (ParseException e) {
e.printStackTrace();
}

5、字符串转为日期(在oracle中间)
to_date(?,'yyyy-mm-dd HH24:mi:ss') //24小时制的转换方式

=============如果要保存毫秒到数据库,则数据库字段需由date改为TIMESTAMP(6),否则毫秒保存不进去,其它的可以保存==========

1、由于oracle中date类型只支持到秒,不支持到毫秒,所以to_date()不能取到毫秒。
2、而与to_date()对应的转换函数可以使用to_timestamp()。
select to_timestamp('2015-7-8 23:04:45 134','yyyy-mm-dd HH24:mi:ss ff3') from dual;
结果:08-7月 -15 11.04.45.134000000 下午
3、如果想将timestamp又转换成date类型,可以使用cast()函数,但得到的date类型没有了毫秒值。如下:
select cast(to_timestamp('2015-7-8 23:04:45 134','yyyy-mm-dd HH24:mi:ss ff3') as date) as mydate from dual;
结果: 2015/7/8 23:04:45
=======================

五、在数据库里的日期只以年-月-日的方式输出
用convert()转化函数,这是SQLServer中:
String sqlst = "select convert(varchar(10),bookDate,126) as convertBookDate from roomBook where bookDate between '2007-4-10' and '2007-4-25'";
System.out.println(rs.getString("convertBookDate"));

相关文档
最新文档