// 1.获得当前系统时间(普通和数据库)
java.util.Date date = new java.util.Date();// 获得当前时间,准确到毫秒
System.out.print(date.getTime() + "\n");// 获得long型的计数
java.sql.Date date1 = new java.sql.Date(date.getTime());// 数据库的date类型
// 2.Calendar和util.Date的转化
// (1) Calendar转化为Date
Calendar cal = Calendar.getInstance();// 默认时区和时间
java.util.Date date2 = cal.getTime();
// (2) Date转化为Calendar
java.util.Date date3 = new Date();
Calendar cal1 = Calendar.getInstance();
cal.setTime(date);
// 3.格式化输出日期时间
java.util.Date date4 = new java.util.Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");
// yyyy 年;MM 月;dd 天;HH 小时;mm 分;ss 秒;E 星期几;a AM/PM;SSS 毫秒
String time = df.format(date);
System.out.println(time);
// 4. String 和 util.Date ,Long 之间相互转换 (最常用)
SimpleDateFormat sdf = new 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");// 转为date
long dvalue = d.getTime();// 转成long
java.text.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1 = format.format(d);// 转成string
// 5. java 和 具体的数据库结合
// oracle的Date类型,即只需要年月日时分秒,可以选择使用java.sql.Date类型
// 数据库的DateTime类型,即需要年月日时分秒加上毫秒,选择java.sql.Timestamp类型
// (1)将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.CHINA);// 设定格式
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse("2013-07-27 22:22:12.111");// util类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());// Timestamp类型,timeDate.getTime()返回一个long型
// (2)将字符串类型的日期转换为一个Date(java.sql.Date)
SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
dateFormat.setLenient(false);
java.util.Date timeDate1 = dateFormat1.parse("2013-07-27 22:22:12");// util类型
java.sql.Date dateTime1 = new java.sql.Date(timeDate.getTime());// sql类型
//6.(1)求某月的天数
Calendar time = Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR, 2011);//year 为 int
time.set(Calendar.MONTH, 1);//注意,Calendar对象默认一月为0
int day = time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
//注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间
//(2)计算某一天是一年中的第几星期
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno = cal.get(Calendar.WEEK_OF_YEAR);
//(3)计算一年中的第几星期是几号
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, 1);
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, 1);
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_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 = (myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate = formatter.format(myDate);
java 日期
最新推荐文章于 2023-05-13 21:14:35 发布