java中的date_Java中Date类型详解
⼀、Date类型的初始化
1、
Date(int year, int month, int date);
直接写⼊年份是得不到正确的结果的。
因为java中Date是从1900年开始算的,所以前⾯的第⼀个参数只要填⼊从1900年后过了多少年就是你想要得到的年份。⽉需要减1,⽇可以直接插⼊。
这种⽅法⽤的⽐较少,常⽤的是第⼆种⽅法。
2、
这种⽅法是将⼀个符合特定格式,⽐如yyyy-MM-dd,的字符串转化成为Date类型的数据。
⾸先,定义⼀个Date类型的对象
Date date = null;
再定义⼀个String类型的符合格式的字符串
String dateStr = "2010-9-10";
把这个字符串进⾏拆分
String[ ] dateDivide = dateStr.split("-");
把年⽉⽇分别取出,赋给Calendar,⽤ Calendar的getTime();取得⽇期再赋给date。
例如:
java中split的用法if(dateDivide.length==3){
int year = Integer.parseInt(dateDivide [0].trim());//去掉空格
int month = Integer.parseInt(dateDivide [1].trim());
int day = Integer.parseInt(dateDivide [2].trim());
Calendar c = Instance();//获取⼀个⽇历实例
c.set(year, month-1, day);//设定⽇历的⽇期
date = c.getTime();
}
⼆、Date类型的⽐较
Date a;
Date b;
假设现在你已经实例化了a和b
a.after(b)返回⼀个boolean,如果a的时间在b之后(不包括等于)返回true
b.before(a)返回⼀个boolean,如果b的时间在a之前(不包括等于)返回true
a.equals(b)返回⼀个boolean,如果a的时间和b相等返回true
三、Date类型常⽤的操作函数
1.计算某⼀⽉份的最⼤天数
Calendar Instance();
time.clear();time.set(Calendar.YEAR,year); //year 为 inttime.set(Calendar.MONTH,i-1);//注意,Calendar对象默认⼀⽉为0int
ActualMaximum(Calendar.DAY_OF_MONTH);//本⽉份的天数注:在使⽤set⽅法之前,必须先clear⼀下,否则很多信息会继承⾃系统当前时间2.Calendar和Date的转化(1) Calendar转化为DateCalendar Instance();Date
Time();(2) Date转化为CalendarDate date=new Date();Calendar Instance();cal.setTime(date);3.格式化输出⽇期时间 (这个⽤的⽐较多)Date date=new Date();SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd
hh:mm:ss");String time=df.format(date);System.out.println(time);4.计算⼀年中的第⼏星期(1)计算某⼀天是⼀年中的第⼏星期Calendar Instance();cal.set(Calendar.YEAR, 2006);cal.set(Calendar.MONTH,
8);cal.set(Calendar.DAY_OF_MONTH, 3);int (Calendar.WEEK_OF_YEAR);(2)计算⼀
年中的第⼏星期是⼏号SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");Calendar Instance();cal.set(Calendar.YEAR, 2006);cal.set(Calendar.WEEK_OF_YEAR, 1);cal.set(Calendar.DAY_OF_WEEK,
Calendar.MONDAY);System.out.println(df.Time()));输出:2006-01-025.add()和roll()的⽤法(不太常⽤)(1)add()⽅法SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");Calendar Instance();cal.set(Calendar.YEAR, 2006);cal.set(Calendar.MONTH, 8);cal.set(Calendar.DAY_OF_MONTH, 3);cal.add(Calendar.DATE, -4);Date
Time();System.out.println(df.format(date));cal.add(Calendar.DATE,
4);Time();System.out.println(df.format(date));输出:2006-08-302006-09-03(2)roll⽅法cal.set(Calendar.YEAR, 2006);cal.set(Calendar.MONTH, 8);cal.set(Calendar.DAY_OF_MONTH, 3);ll(Calendar.DATE, -
4);Time();System.out.println(df.format(date));ll(Calendar.DATE,
4);Time();System.out.println(df.format(date));输出:2006-09-292006-09-03可见,roll()⽅法在本⽉内循环,⼀般使⽤add()⽅法;
6.计算两个任意时间中间的间隔天数(这个⽐较常⽤)
(1)传进Calendar对象public int getIntervalDays(Calendar startday,Calendar endday)...{if(startday.after(endday))...{Calendar
cal=startday;startday=endday;endday=cal;}long TimeInMillis();long TimeInMillis();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 Time();
long Time();
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;
}
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_OF_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=(Time()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
7. String 和 Date ,Long 之间相互转换 (最常⽤)
字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式⼀致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-⽐较
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long Time();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
8. 通过时间求时间
年⽉周求⽇期
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);
9. 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)
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.Time());//Timestamp类型,Time()返回⼀个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.Time());//sql类型
return dateTime;
}
public static void main(String[] args){
Date da = new Date();
注意:这个地⽅da.getTime()得到的是⼀个long型的值
System.out.Time());
由⽇期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 Instance().get(
Calendar.YEAR) - 1900, Instance().get(
Calendar.MONTH), Instance().get(
Calendar.DATE), Instance().get(
Calendar.HOUR), Instance().get(
Calendar.MINUTE), Instance().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:"+String());//结果显⽰
System.out.println("Timestamp:"+String());//结果显⽰
}catch(Exception e) {
e.printStackTrace();
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论