java 日期

// 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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值