Celendar Date GregorianCalendar 的一些操作的整理

来源:互联网 发布:数控立钻编程实例 编辑:程序博客网 时间:2024/05/28 04:52

package shijian;

import java.util.*;
/**
 * @author高厦
 * 我们注意以下几点:
 * 1.外国的一个星期开始的一天是 星期天 数字代号为1
 * 2.外国的一个月开始是一月 数字代号为 0
 * 3.我们这里一般用它们的静态常量去进行计算
 * 4.大写的如:DAY_OF_WEEK 等都是具体的操作(控制)常量,它们只是告诉你具体的操作
 * */
public class Shijian {
 public static final int MAIO = 0;
 public static final int FEN_ZHONG = 1;
 public static final int XIAO_SHI = 2;
 public static final int RI = 3;
 public static final int YUE = 4;
 public static final int NIAN = 5;

 // 获得当前时间年月日时和获取1970年后的毫秒数
 public static long catchDmdh() {
  Date date=new Date();
  return date.getTime();
 }

 /*
  * -------------时间操作
  */
 // 现在时间添加一段时间后的时间(制定具体添加类型)
 public static Date addNowTime(int leixing, int shijian) {
  GregorianCalendar gCa = new GregorianCalendar();
  // 用setTime设置当前时间
  gCa.setTime(new Date());
  switch (leixing) {
  case MAIO:
   gCa.add(Calendar.SECOND, shijian);
   return gCa.getTime();
  case FEN_ZHONG:
   gCa.add(Calendar.MINUTE, shijian);
   return gCa.getTime();
  case XIAO_SHI:
   gCa.add(Calendar.HOUR, shijian);
   return gCa.getTime();
  case RI:
   gCa.add(Calendar.DATE, shijian);
   return gCa.getTime();
  case YUE:
   gCa.add(Calendar.MONTH, shijian);
   return gCa.getTime();
  case NIAN:
   gCa.add(Calendar.YEAR, shijian);
   return gCa.getTime();
  default:
   return null;
  }

 }

 // 向具体某段时间添加一段时间后的时间
 public static Date addConNowTime(int nian, int yue, int ri, int xiaoshi,
   int fenzhong, int miao, int leixing, int shijian)

 {
  GregorianCalendar gCa = new GregorianCalendar(nian, yue, ri, xiaoshi,
    fenzhong, miao);
  switch (leixing) {
  case 0:
   gCa.add(Calendar.SECOND, shijian);
   return gCa.getTime();
  case 1:
   gCa.add(Calendar.MINUTE, shijian);
   return gCa.getTime();
  case 2:
   gCa.add(Calendar.HOUR, shijian);
   return gCa.getTime();
  case 3:
   gCa.add(Calendar.DATE, shijian);
   return gCa.getTime();
  case 4:
   gCa.add(Calendar.MONTH, shijian);
   return gCa.getTime();
  case 5:
   gCa.add(Calendar.YEAR, shijian);
   return gCa.getTime();
  default:
   return null;
  }

 }

 /*
  * 具体的星期操作
  *
  *
  */
 
 
 //获得当前是多少周
 
 public static int getWeekOfYear(Date date) {
  Calendar c = new GregorianCalendar();
  //设置第一天是星期1
  c.setFirstDayOfWeek(Calendar.MONDAY);
  c.setMinimalDaysInFirstWeek(7);
  c.setTime (date);

  return c.get(Calendar.WEEK_OF_YEAR);
  }

 // 得到某一年周的总数
 
 public static int getMaxWeekNumOfYear(int year) {
 Calendar c = new GregorianCalendar();
 c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);

 return getWeekOfYear(c.getTime());
 }
 
 /*得到某年某周的第一天
 */
 public static Date getFirstDayOfWeek(int year, int week) {
 Calendar c = new GregorianCalendar();
 c.set(Calendar.YEAR, year);
 c.set (Calendar.MONTH, Calendar.JANUARY);
 c.set(Calendar.DATE, 1);
 Calendar cal = (GregorianCalendar) c.clone();
 cal.add(Calendar.DATE, week * 7);
 return getConNowWeekFirstDate(cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE));
 }
 // 获得当前日期所在的星期的第一天(星期1)是几号
 
 public static Date getNowWeekFirstDate() {
  GregorianCalendar gCa = new GregorianCalendar();
  // 设置这个星期的第一天为星期1
  gCa.setFirstDayOfWeek(Calendar.MONDAY);
  // 把当前时间设置成这个星期的星期1
  gCa.set(Calendar.DAY_OF_WEEK, gCa.getFirstDayOfWeek());
  return gCa.getTime();
 }
 
 // 获得具体时间所在的星期的第一天(星期1)是几号
 
 public static Date getConNowWeekFirstDate(int nian, int yue, int ri) {
  GregorianCalendar gCa = new GregorianCalendar();
  //注意这里外国的月是从0开始的
  gCa.set(nian,yue,ri);

  Calendar c=new GregorianCalendar();
  c.setTime(gCa.getTime());
  // 设置这个星期的第一天为星期1
  gCa.setFirstDayOfWeek(Calendar.MONDAY);
  // 把当前时间设置成这个星期的星期1
  gCa.set(Calendar.DAY_OF_WEEK, gCa.getFirstDayOfWeek());
  return gCa.getTime();
 }
 
 // 获得当前星期的最后一天(星期天)是几号
 
 public static Date getNowWeekLastDate() {
  GregorianCalendar gCa = new GregorianCalendar();
  // 把日期加七(因为中国的时间和国外的时间不同国外本星期的星期天就是中国上星期的星期天)
  gCa.add(Calendar.DATE, 7);
  // 把时间设置为这个星期的星期天
  gCa.set(Calendar.DAY_OF_WEEK, 1);
  return gCa.getTime();
 }

 
 // 获得具体时间所在的星期的最后一天(星期天)是几号
 
 public static Date getConNowWeekLastDate(int nian, int yue, int ri) {
  GregorianCalendar gCa = new GregorianCalendar();
  //注意这里外国的月是从0开始的
  gCa.set(2008,Calendar.OCTOBER,28,11,22,11);
  gCa.add(Calendar.DATE, 7);
  
  Calendar c=new GregorianCalendar();
  c.setTime(gCa.getTime());
  // 设置这个星期的第一天为星期1
  gCa.setFirstDayOfWeek(Calendar.MONDAY);
  // 把当前时间设置成这个星期的星期1
  gCa.set(Calendar.DAY_OF_WEEK, 1);
  return gCa.getTime();
 }
 
 //获得具体月份的天数
 
 public static int getDaysOfMonth(int nian ,int yue)
 {
  
  Calendar cal=new GregorianCalendar();
  
  cal.set(Calendar.YEAR, nian);
  cal.set(Calendar.MONTH, yue);
  cal.set(cal.DATE, 1);
  cal.roll(cal.DATE, -1); 
  return cal.get(cal.DATE);
 }
 
 //获得具体时间所在的月份的第一天是星期几 
 public static int getDayOfMonthInWeek(int nian ,int yue)
 {
  Calendar cal=new GregorianCalendar();
  
  cal.set(Calendar.YEAR, nian);
  cal.set(Calendar.MONTH, yue);
  cal.set(cal.DATE, 1);
  return (cal.get(cal.DAY_OF_WEEK)-1);
 }

 public static void main(String[] args) {
  System.out.print(Shijian.getFirstDayOfWeek(2008, 3));

 }
}