package ham; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class TimeTest { /** * @param args * @throws ParseException */ public static void main(String[]args)throws ParseException { getLevelTime("2012-01-01 10:43:07", "2012-01-02 05:23:56", "hour"); } public static void getLevelTime(String startTimeStr, String endTimeStr, String type)throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date startTime = dateFormat.parse(startTimeStr); Date endTime = dateFormat.parse(endTimeStr); Calendar startCal = Calendar.getInstance(); Calendar endCal = Calendar.getInstance(); startCal.setTime(startTime); endCal.setTime(endTime); if ("year".equals(type)) { //判斷是否在同一年 if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR)) { System.out.println("同一年內"); } else { //最開始一年最後時刻,月份比正常認知少一個數 Calendar startCal_ = Calendar.getInstance(); startCal_.set(startCal.get(Calendar.YEAR), 11, 31, 23, 59, 59); //最後一年開始時刻 Calendar endCal_ = Calendar.getInstance(); endCal_.set(endCal.get(Calendar.YEAR), 0, 1, 0, 0, 0); //開始時間 System.out.print(dateFormat.format(startCal.getTime()) + "---"); //最開始一年 末尾 System.out.println(dateFormat.format(startCal_.getTime())); //中間年數 int count = (int)(((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000)) / 365); for (int j = 0; j < count; j++) { //第n年 起始 startCal_.set(Calendar.SECOND, 60); System.out.print(dateFormat.format(startCal_.getTime()) + "---"); //第n年 末尾 startCal_.set(Calendar.YEAR, startCal_.get(Calendar.YEAR)); startCal_.set(Calendar.MONTH, 11); // ***月份設置*** startCal_.set(Calendar.DATE, 31); startCal_.set(Calendar.HOUR, 23); startCal_.set(Calendar.MINUTE, 59); startCal_.set(Calendar.SECOND, 59); System.out.println(dateFormat.format(startCal_.getTime())); } //最後一年 開始 System.out.print(dateFormat.format(endCal_.getTime()) + "---"); //結束時間 System.out.println(dateFormat.format(endCal.getTime())); } } if ("month".equals(type)) { //判斷是否在同一年 if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH)) { System.out.println("同一月內"); } else { //最開始一個月最後時刻,重點在於設置一個月中的天數(每月的天數不一樣) Calendar startCal_ = Calendar.getInstance(); startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.getActualMaximum(Calendar.DATE), 23, 59, 59); //最後一個月開始時刻 Calendar endCal_ = Calendar.getInstance(); endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), 1, 0, 0, 0); //開始時間 System.out.print(dateFormat.format(startCal.getTime()) + "---"); //最開始一個月 末尾 System.out.println(dateFormat.format(startCal_.getTime())); //中間月數 int count = (int)(((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000)) / 30); for (int j = 0; j < count; j++) { //第n個月 起始 startCal_.set(Calendar.SECOND, 60); System.out.print(dateFormat.format(startCal_.getTime()) + "---"); //第n個月 末尾 startCal_.set(Calendar.MONTH, startCal_.get(Calendar.MONTH)); //根據具體時間獲取其所在月的天數 *** startCal_.set(Calendar.DATE, startCal_.getActualMaximum(Calendar.DATE)); startCal_.set(Calendar.HOUR, 23); startCal_.set(Calendar.MINUTE, 59); startCal_.set(Calendar.SECOND, 59); System.out.println(dateFormat.format(startCal_.getTime())); } //最後一個月 開始 System.out.print(dateFormat.format(endCal_.getTime()) + "---"); //結束時間 System.out.println(dateFormat.format(endCal.getTime())); } } else if ("day".equals(type)) { //判斷是否在同一天 if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH) && startCal.get(Calendar.DATE) == endCal.get(Calendar.DATE)) { System.out.println("同一天內"); } else { //第一天最後時刻 Calendar startCal_ = Calendar.getInstance(); startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DATE), 23, 59, 59); //最後一天開始時刻 Calendar endCal_ = Calendar.getInstance(); endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DATE), 0, 0, 0); //開始時間 System.out.print(dateFormat.format(startCal.getTime()) + "---"); //第一天 末尾 System.out.println(dateFormat.format(startCal_.getTime())); //中間天數 int count = (int)((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (24 * 60 * 60 * 1000)); for (int j = 0; j < count; j++) { //第n天 起始 startCal_.set(Calendar.SECOND, 60); System.out.print(dateFormat.format(startCal_.getTime()) + "---"); //第n天 末尾 startCal_.set(Calendar.DATE, startCal_.get(Calendar.DATE)); startCal_.set(Calendar.HOUR, 23); startCal_.set(Calendar.MINUTE, 59); startCal_.set(Calendar.SECOND, 59); System.out.println(dateFormat.format(startCal_.getTime())); } //最後一天 開始 System.out.print(dateFormat.format(endCal_.getTime()) + "---"); //結束時間 System.out.println(dateFormat.format(endCal.getTime())); } } else if ("hour".equals(type)) { //判斷是否在同一小時 if (startCal.get(Calendar.YEAR) == endCal.get(Calendar.YEAR) && startCal.get(Calendar.MONTH) == endCal.get(Calendar.MONTH) && startCal.get(Calendar.DATE) == endCal.get(Calendar.DATE) && startCal.get(Calendar.HOUR) == endCal.get(Calendar.HOUR)) { System.out.println("同一小時內"); } else { //最開始一小時最後時刻 Calendar startCal_ = Calendar.getInstance(); startCal_.set(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DATE), startCal.get(Calendar.HOUR_OF_DAY), 59, 59); //最後一小時開始時刻 Calendar endCal_ = Calendar.getInstance(); endCal_.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DATE), endCal.get(Calendar.HOUR_OF_DAY), 0, 0); //開始時間 System.out.print(dateFormat.format(startCal.getTime()) + "---"); //最開始一小時 末尾 System.out.println(dateFormat.format(startCal_.getTime())); //中間小時數 int count = (int)((endCal_.getTime().getTime() - startCal_.getTime().getTime()) / (60 * 60 * 1000)); for (int j = 0; j < count; j++) { //第n個小時 起始 startCal_.set(Calendar.SECOND, 60); System.out.print(dateFormat.format(startCal_.getTime()) + "---"); //第n個小時 末尾 startCal_.set(Calendar.HOUR, startCal_.get(Calendar.HOUR)); startCal_.set(Calendar.MINUTE, 59); startCal_.set(Calendar.SECOND, 59); System.out.println(dateFormat.format(startCal_.getTime())); } //最後一小時 開始 System.out.print(dateFormat.format(endCal_.getTime()) + "---"); //結束時間 System.out.println(dateFormat.format(endCal.getTime())); } } } }
** 幾個重點注意的地方:
1.月份設置(根據實際時間所在的月份設置該月的天數)
startCal.getActualMaximum(Calendar.DATE)
2.獲得24小時制的小時數值
Calendar date = Calendar.getInstance();
date.get(Calendar.HOUR_OF_DAY );//獲得24小時機制的
date.get(Calendar.HOUR);// 獲得12小時機制的java