您的位置:首页 > 编程语言 > Java开发

java日期类型转换总结date timestamp calendar string

2016-02-29 11:15 741 查看
用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式。

Timestamp转化为String:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒
Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间
String str = df.format(now);

String转化为Timestamp:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String time = df.format(new Date());
Timestamp ts =
Timestamp.valueOf(time);

Date、String、Timestamp之间的转换!

Date 和String之间的转换main函数:

public static void main(String[] args) {

// TODO Auto-generated method
stub

DateFormat format = new
SimpleDateFormat("yyyy-MM-dd");

Date date =
null;

String str =
null;

//
String转Date

str =
"2009-01-06";

try {

date = format.parse(str); // Wed sep 26 00:00:00 CST
2007

} catch (ParseException e)
{

e.printStackTrace();

}

date = java.sql.Date.valueOf(str); // 只保留日期部分,返回的是java.sql.Date
2007-9-26

System.out.println(date);

//
Date转String

date = new Date(); // Wed sep
26 18 17:14:01 CST
2007

str = format.format(date); //
2007-9-26

System.out.println(str);

format =
DateFormat.getDateInstance(DateFormat.SHORT);

str = format.format(date); // 07-9-26

System.out.println(str);

format =
DateFormat.getDateInstance(DateFormat.MEDIUM);

str = format.format(date); //
2007-9-26

System.out.println(str);

format =
DateFormat.getDateInstance(DateFormat.FULL);

str = format.format(date); // 2007年9月26日 星期三

System.out.println(str);

}

Timestamp和String之间转换的函数:

public static void main(String[] args) {

// TODO Auto-generated method
stub

//Timestamp转化为String:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");//定义格式,不显示毫秒

Timestamp
now = new Timestamp(System.currentTimeMillis());//获取系统当前时间

String str =
df.format(now);

System.out.println(str);

///String转化为Timestamp:

SimpleDateFormat df1 = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date =
new Date();

String time
= df1.format(date);

Timestamp ts
= Timestamp.valueOf(time);

System.out.println(ts);

}

1.计算某一月份的最大天数

Calendar time=Calendar.getInstance();

time.clear();

time.set(Calendar.YEAR,year); //year 为 int

time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0

int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数

注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date

Calendar cal=Calendar.getInstance();

Date date=cal.getTime();

(2) Date转化为Calendar

Date date=new Date();

Calendar cal=Calendar.getInstance();

cal.setTime(date);

3.把字符串转化为java.util.Date

方法一:

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

java.util.Date dt=sdf.parse("2005-2-19");

System.out.print(sdf.format(dt));
//输出结果是:2005-2-19

方法二:

java.util.Date dt=null;

DateFormat df=DateFormat.getDateInstance();

dt=df.parse("2005-12-19");

System.out.println(dt);
//输出结果为:Mon Dec 19 00:00:00 CST 2005

System.out.println(df.format(dt)); //输出结果为:2005-2-19

4.把字符串转化为java.sql.Date

字符串必须是"yyyy-mm-dd"格式,否则会抛出IllegalArgumentException异常

java.sql.Date sdt=java.sql.Date.valueOf("2005-9-6");

System.out.println(sdt);
//输出结果为:2005-9-6

5.格式化输出日期时间 (这个用的比较多)

Date date=new Date();

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd
hh:mm:ss");

String time=df.format(date);

System.out.println(time);

需要注意的一点:SimpleDateFormat类格式化一个字符串时,可根据需要调用 format() 或 parse()
函数;只不过format()返回String类型,parse()返回java.util.Date类型

6.计算一年中的第几星期

(1)计算某一天是一年中的第几星期

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.WEEK_OF_YEAR, 1);

cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

System.out.println(df.format(cal.getTime()));

输出:

2006-01-02

7.add()和roll()的用法(不太常用)

(1)add()方法

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");

Calendar cal=Calendar.getInstance();

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

cal.add(Calendar.DATE, -4);

Date date=cal.getTime();

System.out.println(df.format(date));

cal.add(Calendar.DATE, 4);

date=cal.getTime();

System.out.println(df.format(date));

输出:

2006-08-30

2006-09-03

(2)roll方法

cal.set(Calendar.YEAR, 2006);

cal.set(Calendar.MONTH, 8);

cal.set(Calendar.DAY_OF_MONTH, 3);

cal.roll(Calendar.DATE, -4);

date=cal.getTime();

System.out.println(df.format(date));

cal.roll(Calendar.DATE, 4);

date=cal.getTime();

System.out.println(df.format(date));

输出:

2006-09-29

2006-09-03

可见,roll()方法在本月内循环,一般使用add()方法;

8.计算两个任意时间中间的间隔天数(这个比较常用)

(1)传进Calendar对象

public int
getIntervalDays(Calendar startday,Calendar
endday){

if(startday.after(endday)){

Calendar cal=startday;

startday=endday;

endday=cal;

}

long sl=startday.getTimeInMillis();

long el=endday.getTimeInMillis();

long
ei=el-sl;

return (int)(ei/(1000*60*60*24));

}

(2)传进Date对象

public
int getIntervalDays(Date startday,Date
endday){

if(startday.after(endday)){

Date cal=startday;

startday=endday;

endday=cal;

}

long sl=startday.getTime();

long
el=endday.getTime();

long
ei=el-sl;

return (int)(ei/(1000*60*60*24));

}

(3)改进精确计算相隔天数的方法

public int
getDaysBetween (Calendar d1, Calendar d2){

if (d1.after(d2)){

java.util.Calendar swap = d1;

d1 = d2;

d2 = swap;

}

int days = d2.get(Calendar.DAY_OF_YEAR) -
d1.get(Calendar.DAY_OF_YEAR);

int y2 = d2.get(Calendar.YEAR);

if (d1.get(Calendar.YEAR) != y2){

d1 = (Calendar) d1.clone();

do{

days += d1.getActualMaximum(Calendar.DAY_F_YEAR);//得到当年的实际天数

d1.add(Calendar.YEAR, 1);

} while (d1.get(Calendar.YEAR) != y2);

}

return days;

}

注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配最好装化成
long去比较

如:1年前日期(注意毫秒的转换)

java.util.Date myDate=new
java.util.Date();

long
myTime=(myDate.getTime()/1000)-60*60*24*365;

myDate.setTime(myTime*1000);

String
mDate=formatter.format(myDate);

3周前的日期

Calendar cal3 =
Calendar.getInstance();

cal3.add(cal3.DATE, -21);//取3周前的日期

String date = formatter.format(cal3.getTime());

9. String 和 Date ,Long 之间相互转换 (最常用)

字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)

通常我们取时间跨度的时候,会substring出具体时间--long-比较

java.text.SimpleDateFormat sdf = new
java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss
a",java.util.Locale.US);

java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");

long dvalue=d.getTime();

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");

String mDateTime1=formatter.format(d);

10. 通过时间求时间

年月周求日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F
E");

java.util.Date date2= formatter2.parse("2003-05 5 星期五");

SimpleDateFormat formatter3 = new
SimpleDateFormat("yyyy-MM-dd");

String mydate2=formatter3.format(date2);

求是星期几

mydate= myFormatter.parse("2001-1-1");

SimpleDateFormat formatter4 = new SimpleDateFormat("E");

String mydate3=formatter4.format(mydate);

11. java 和 具体的数据库结合

在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver
数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型

你可以使用dateFormat定义时间日期的格式,转一个字符串即可

class Datetest{

*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)

*@param dateString
需要转换为timestamp的字符串

*@return dataTime timestamp

public final static java.sql.Timestamp string2Time(String
dateString)

throws java.text.ParseException {

DateFormat dateFormat;

dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS",
Locale.ENGLISH);//设定格式

//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss",
Locale.ENGLISH);

dateFormat.setLenient(false);

java.util.Date timeDate =
dateFormat.parse(dateString);//util类型

java.sql.Timestamp dateTime = new
java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型

return dateTime;

}

*method 将字符串类型的日期转换为一个Date(java.sql.Date)

*@param dateString 需要转换为Date的字符串

*@return dataTime Date

public final static java.sql.Date string2Date(String
dateString)

throws java.lang.Exception {

DateFormat dateFormat;

dateFormat = new SimpleDateFormat("yyyy-MM-dd",
Locale.ENGLISH);

dateFormat.setLenient(false);

java.util.Date timeDate =
dateFormat.parse(dateString);//util类型

java.sql.Date dateTime = new
java.sql.Date(timeDate.getTime());//sql类型

return dateTime;

}

public static void main(String[] args){

Date da = new Date();

注意:这个地方da.getTime()得到的是一个long型的值

System.out.println(da.getTime());

由日期date转换为timestamp

第一种方法:使用new Timestamp(long)

Timestamp t = new Timestamp(new Date().getTime());

System.out.println(t);

第二种方法:使用Timestamp(int year,int month,int date,int hour,int
minute,int second,int nano)

Timestamp tt = new Timestamp(Calendar.getInstance().get(

Calendar.YEAR) - 1900, Calendar.getInstance().get(

Calendar.MONTH), Calendar.getInstance().get(

Calendar.DATE), Calendar.getInstance().get(

Calendar.HOUR), Calendar.getInstance().get(

Calendar.MINUTE), Calendar.getInstance().get(

Calendar.SECOND), 0);

System.out.println(tt);

try {

String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串

String sToTimestamp = "2005-8-18
14:21:12.123";//用于转换成java.sql.Timestamp的字符串

Date date1 = string2Date(sToDate);

Timestamp date2 = string2Time(sToTimestamp);

System.out.println("Date:"+date1.toString());//结果显示

System.out.println("Timestamp:"+date2.toString());//结果显示

}catch(Exception e) {

e.printStackTrace();

}

}

}

一、Date的构造函数

1.1构造一个反映当时时间的Date实例

Date

public Date()

构造一个Date对象并对其进行初始化以反映当前时间。

1.2从一个长整型数据构造一个Date实例

Date

public Date(long date)

构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。

参数:

date - 相对于GMT 1970年1月1日00:00:00的毫秒数。

1.3从年月日时分秒构造一个Date实例

Date

public Date(int year,

int month,

int date)

public Date(int year,

int month,

int date,

int hrs,

int min)

public Date(int year,

int month,

int date,

int hrs,

int min,

int sec)

这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month,
date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year
+ 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900,
month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs,
min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min,
sec)代替。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: