1. 程式人生 > >java的Calendar和Date類

java的Calendar和Date類

JDK1.0中,Date類是唯一的一個代表時間的類,但是由於Date類不便於實現國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。下面通過程式簡單介紹下:

public class DateTest {
	public static void main(String[] args) {
			//用new Date的方式輸出現在時間
			String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());  
		    System.out.println(str);  
		    //用Calendar類的方法輸出現在的時間
		    Calendar  calendar=Calendar.getInstance();
		    String s=(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")).format(calendar.getTime());
		    System.out.println(s);
		    //取得Calendar中的年,用同樣的方法可以取得月日和具體的時分秒
		    int year=calendar.get(Calendar.YEAR);
		    System.out.println("[1]the year is:"+ year);
		    //Calendar類提供了一組方法用來取得今天是這年,這個月,這周的第幾天
		    int TheDayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
		    System.out.println("[2]the day of month is:"+TheDayOfMonth);
		    //現在是這個月的的幾周
		    int TheWeekOfMonth=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);
		    System.out.println("[3]the week of month is:"+TheWeekOfMonth);
		    //將時間改為3天后的這個時候,同樣可以改年份,月份,和具體的時分秒,如果是改到現在時間之前的某個時間,則用負數
		    calendar.add(Calendar.DATE, 3);
		    int ThreeDayAfter=calendar.get(Calendar.DATE);
		    System.out.println("[4]3 days later is:"+ThreeDayAfter);
		    
		    //Calendar類提供了一組方法(getTime和setTime)用於和Date類的轉換
		    Date d = new Date();
            Calendar c6 = Calendar.getInstance();
            //Calendar型別的物件轉換為Date物件
            Date d1 = c6.getTime();
            //Date型別的物件轉換為Calendar物件
            Calendar c7 = Calendar.getInstance();
            c7.setTime(d);
            
            //Calender類提供一組方法用於和相對時間的轉化
            Calendar c8 = Calendar.getInstance();
            long t = 1252785271098L;
            //將Calendar物件轉換為相對時間
            long t1 = c8.getTimeInMillis();
            //將相對時間轉換為Calendar物件
            Calendar c9 = Calendar.getInstance();
            c9.setTimeInMillis(t1);
            
            //Calendar提供了一組方法用於兩個時間的比較,before和after
            Calendar c4 = Calendar.getInstance();
            c4.set(2009, 10 - 1, 10);
            Calendar c5 = Calendar.getInstance();
            c5.set(2010, 10 - 1, 10);
            boolean b = c5.after(c4);
            System.out.println("[11]c5在c4後面?:"+b);
		    
		    //Date類的很多方法從jdk1.1開始都不推薦使用
		    Date date=new Date();
		    int DateOfYear=date.getYear();
		    System.out.println("[5]the date year is:"+(DateOfYear+1900));
		    int day=date.getDate();
		    System.out.println("[6]the date day is:"+day);
		    int DateMonth=date.getMonth();
		    System.out.println("[7]the date month is:"+(DateMonth+1));
		    int DateHour=date.getHours();
		    System.out.println("[8]the date hour is:"+DateHour);
		    int DateMinute=date.getMinutes();
		    System.out.println("[9]the date minute is:"+DateMinute);
		    int DateSecond=date.getSeconds();
		    System.out.println("[10]the date hour is:"+DateSecond);
	}	    
}

專案中的應用

專案要求是:要在日誌中顯示這週一到現在的登入次數。程式實現是:

        Date endTime=new Date();
        Calendar calendar = Calendar.getInstance();
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
        // 減去dayOfWeek,得到第一天的日期,因為Calendar用0-6代表一週七天,所以要減一
        calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));
        calendar.set(calendar.HOUR,12);
        calendar.set(calendar.MINUTE,00);
        calendar.set(calendar.SECOND,00);
        Date startTime = calendar.getTime();
然後從資料庫中查出來,統計下。。。。
專案中要求用現在的時間減去使用者的出生日期得到使用者的年齡
 /**
     *年齡是通過計算得到的取現在的日期減去出生日期
     * @return
     */
    public int getAge() {
        if(this.getBirthdate()==null){
            return -1;
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
        Calendar  calendar=Calendar.getInstance();
        int nowYear=calendar.get(Calendar.YEAR);
        String dateToString=dateFormat.format(birthdate);
        int stringToInt=Integer.parseInt(dateToString);
        return nowYear-stringToInt;
	}

測試的方法:
 @Test
    public void testGetAge() throws Exception {
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date=simpleDateFormat.parse("2010-01-01 00:00:00");
        User user=new User();
        user.setBirthdate(date);
        System.out.println(user.getAge());
    }
取得當前工作日的下一個工作日
 /**
     * 取得下一個工作日期
     * 2017-11-24
     * @return
     */
    public static String getNextWorkdate(){
        String now= new SimpleDateFormat("yyyyMMdd", Locale.getDefault()).format(new Date()).toString();
        Calendar cal = Calendar.getInstance();
        String pattern="yyyy-MM-dd";
        Date date=null;
        SimpleDateFormat dateFormat=new SimpleDateFormat(pattern);
        try {
            date=dateFormat.parse(now);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        cal.setTime(date);
        int week = cal.get(Calendar.DAY_OF_WEEK) - 1;//今天是星期幾
        if(week == 5){//如果今天是星期五
            cal.roll(Calendar.DAY_OF_YEAR, 3);
        }else if(week == 6){
            cal.roll(Calendar.DAY_OF_YEAR, 2);
        }else{
            cal.roll(Calendar.DAY_OF_YEAR, 1);
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
        String dateStr = df.format(cal.getTime());
        return dateStr;
    }
列印報表時有個列印時間:
String printTime=new SimpleDateFormat("yyyy/mm/dd HH:mm", Locale.getDefault()).format(new Date()).toString();

java語言用xftp訪問linux伺服器檔案得到檔案的修改時間(new Date()出來的格式):

 /**
     * 國際化的時間格式日期轉換為常見格式
     * 2018-6-13
     * @param StringDate
     * @return
     */
    public String getFormatDate(String StringDate){
        String sDate="";
        SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK);
           try
           {
                   Date date=sdf1.parse(StringDate);
               SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                sDate=sdf.format(date);
//               System.out.println(sDate);
           }
           catch (ParseException e)
           {
               e.printStackTrace();
           }

        return sDate;
    }

結尾。。。