Board logo

标题: Java时间类以及函数 [打印本页]

作者: qingqing3721    时间: 2011-5-19 01:13     标题: Java时间类以及函数

1. 计算某一月份的最大天数
  Calendar time=Calendar. getInstance();
  time. clear();
  time. set(Calendar. YEAR, year);
  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. 格式化输入日期时间
  Date date=new Date();
  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
  System. out. println(df. format(date));
  4. 计算一年中的第几星期
  (1)计算某一天是一年中的第几星期
  Calendar cal=Calendar. getInstance();
  cal. set(Calendar. YEAR,  2006);
  cal. set(Calendar. MONTH, ;
  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
  5. add()和roll()的用法
  (1)add()方法
  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
  Calendar cal=Calendar. getInstance();
  cal. set(Calendar. YEAR,  2006);
  cal. set(Calendar. MONTH, ;
  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, ;
  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()方法;
  6. 计算两个恣意时间中间的距离天数
  (1)传进Calendar对象
  /**计算两个时间之间相隔天数
  * @param startday 开始时间
  * @param endday 完毕时间
  * @return
  */
  public int getIntervalDays(Calendar startday, Calendar endday){
  //确保startday在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对象
  /**计算两个时间之间相隔天数
  * @param startday 开始时间
  * @param endday 完毕时间
  * @return
  */
  public int getIntervalDays(Date startday, Date endday){
  //确保startday在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));
  }
  同理, 可以用相反的方法计算出恣意两个时间相隔的小时数, 分钟数, 秒钟数等
  注:以上方法是完全按时间计算, 有时并不能令人满意, 如:
  startday="2006-10-11 20:00:00"
  endday="2006-10-12 8:00:00"
  计算后果为0, 但是我们也许相让计算后果变为1, 此时可以用如下方法完成:
  在传参之前, 先设定endday的时间, 如:
  endday. set(Calendar. HOUR_OF_DAY,  23);
  endday. set(Calendar. MINUTE,  59);
  endday. set(Calendar. SECOND,  59);
  endday. set(Calendar. MILLISECOND,  59);
  这样再传出来startday, endday, 则后果就如我们所愿了。 不过, 如果嫌以上方法麻烦, 可以参考以下方法:
  (3)改良精确计算相隔天数的方法
  public int getDaysBetween (Calendar d1,  Calendar d2) {
  if (d1. after(d2)) { // swap dates so that d1 is start and d2 is end
  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;
  }文章由 geerben.tk 戈尔本淘宝官方旗舰店 整理,收集辛苦,希望能保留出处。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0