Date類
Date類的大多數構造函數和方法都已經拋棄,只留下和毫秒有關的操作,目前常用的構造函數

常用方法
設置毫秒數

讀取毫秒數

toString()打印結果
//創建日期對象,把當前的毫秒值轉成日期對象 Date date = new Date(1607616000000L); System.out.println(date); //打印結果:Fri Dec 11 00:00:00 CST 2020
DateFormate類格式化日期
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat類)允許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標准化。將Date由毫秒轉換為指定的表現形式。

pattern格式
當出現y時,會將y替換成年
當出現M時,會將M替換成月
當出現d時,會將d替換成日
當出現H時,會將H替換成時
當出現m時,會將m替換成分
當出現s時,會將s替換成秒
代碼演示: //創建日期格式化對象,在獲取格式化對象時可以指定風格 DateFormat df= new SimpleDateFormat("yyyy-MM-dd");//對日期進行格式化 Date date = new Date(1607616000000L); String str_time = df.format(date); System.out.println(str_time);//2020年12月11日
常用方法

代碼演示: 練習一:把Date對象轉換成String Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020 DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”); String str = df.format(date); //str中的內容為2020年12月11日 練習二:把String轉換成Date對象 String str = ”2020年12月11日”; DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”); Date date = df.parse( str ); //Date對象中的內容為Fri Dec 11 00:00:00 CST 2020
Calendar類
Calendar是日歷類,在Date后出現,替換掉了許多Date的方法。該類將所有可能用到的時間信息封裝為靜態成員變量,方便獲取。
Calendar為抽象類,由於語言敏感性,Calendar類在創建對象時並非直接創建,而是通過靜態方法創建,將語言敏感內容處理好,再返回子類對象

Calendar c = Calendar.getInstance(); //返回當前時間
常用方法

public static Calendar getInstance() //獲取日期對象
public int get(int field) //獲取時間字段值,字段參見幫助文檔
YEAR 年
MONTH 月,從0開始算起,最大11;0代表1月,11代表12月。
DATE 天
HOUR 時
MINUTE分
SECOND秒
Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); //獲取年份 int month = calendar.get(Calendar.MONTH)+1; //國外是0-11月,所以要加一 int day = calendar.get(Calendar.DAY_OF_MONTH); //獲取月的第幾日 System.out.println("年:"+year+"月:"+month+"日:"+day);
public final void set(int field,int value)//設置指定字段的值
Calendar calendar = Calendar.getInstance(); //設置時間為2020年5月20日 calendar.set(Calendar.YEAR, 2020); calendar.set(Calendar.MONTH, 4); calendar.set(Calendar.DATE, 20);
public final Date getTime() //獲取該日歷對象轉成的日期對象
Calendar c = Calendar.getInstance(); Date d = c.getTime();
public void add(int field,int amount) //指定字段增加某值
Calendar c = Calendar.getInstance(); //修改當前時間為3天后 c.add(Calendar.DATE, 3); //修改當前時間為5小時后 c.add(Calendar.HOUR, 5);
小節:Date類是日期類,DateFormate類用來將Date和字符串形式的日期相互轉換,Calendar類用來操作Date類。
封裝一個簡單的日期格式化類
public class Time { //date為日期時間,format為格式 public static String getDateFormat(Date date,String format) { return new SimpleDateFormat(format).format(date); } }
1.獲取當前時間
Calendar calendar = Calendar.getInstance();
String now = Time.getDateFormat(calendar.getTime(),"yyyy-MM-dd HH:mm:ss");
2.獲取今天到現在的時間段
Calendar c = Calendar.getInstance(); String left_time = null, right_time = null; //當前時間 right_time = Time.getDateFormat(c.getTime(),"yyyy-MM-dd HH:mm:ss"); //將calendar設為 年月日00:00:00 c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE),0,0,0); //凌晨時間 left_time = Time.getDateFormat(c.getTime(),"yyyy-MM-dd HH:mm:ss");
3.獲取從周一到目前為止的時間段
Calendar c = Calendar.getInstance(); String left_time = null, right_time = null; //獲取今天是這周的第幾天,周日為1,周一為2,周六為7 int day = c.get(Calendar.DAY_OF_WEEK); //獲取當前時間 right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"); //獲取周一的calendar,如果是周日,則減6.如果不是,則減去DAY_OF_WEEK比周一Val大的部分.剩下的就是周一 c.add(Calendar.DAY_OF_MONTH, day==Calendar.SUNDAY?-6:-(day - Calendar.MONDAY)); //獲取本周一的凌晨時間,獲取周一的年月日,然后拼接00:00:00 left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";
4.獲取本月到目前的時間段
Calendar c = Calendar.getInstance(); String left_time = null, right_time = null; //獲取當前時間 right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"); //calendar設為本月一號 c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1); //獲取本月一號凌晨時間 left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";
5.獲取本季度到目前為止的時間段
//LeftTimeAndEndTime為封裝了起始時間的類,c為Calendar 實例 private CitizenCardStatistics quarterly(LeftTimeAndEndTime s,Calendar c) { Calendar c1 = Calendar.getInstance(); c1.set(c.get(Calendar.YEAR), Calendar.JANUARY, 1); Calendar c3 = Calendar.getInstance(); c3.set(c.get(Calendar.YEAR), Calendar.MARCH, 31); Calendar c4 = Calendar.getInstance(); c4.set(c.get(Calendar.YEAR), Calendar.APRIL, 1); Calendar c6 = Calendar.getInstance(); c6.set(c.get(Calendar.YEAR), Calendar.JUNE, 30); Calendar c7 = Calendar.getInstance(); c7.set(c.get(Calendar.YEAR), Calendar.JULY, 1); Calendar c9 = Calendar.getInstance(); c9.set(c.get(Calendar.YEAR), Calendar.SEPTEMBER, 30); Calendar c10 = Calendar.getInstance(); c10.set(c.get(Calendar.YEAR), Calendar.OCTOBER, 1); if(c.compareTo(c1)>=0&&c.compareTo(c3)<=0){//一季度 s.setLeft_time(Time.getDateFormat(c1.getTime(), "yyyy-MM-dd ") + left); s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss")); }else if(c.compareTo(c4)>=0&&c.compareTo(c6)<=0){//二季度 s.setLeft_time(Time.getDateFormat(c4.getTime(), "yyyy-MM-dd ") + left); s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss")); }else if(c.compareTo(c7)>=0&&c.compareTo(c9)<=0){//三季度 s.setLeft_time(Time.getDateFormat(c7.getTime(), "yyyy-MM-dd ") + left); s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss")); }else{//四季度 s.setLeft_time(Time.getDateFormat(c10.getTime(), "yyyy-MM-dd ") + left); s.setRight_time(Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss")); } return s; } //封裝起始時間的類 LeftTimeAndEndTime s = new LeftTimeAndEndTime(); Calendar c = Calendar.getInstance(); String left_time = null, right_time = null; //根據calendar獲取本季度時間和當前時間 s = quarterly(s, c); left_time = s.getLeft_time(); right_time = s.getRight_time();
6.年度到目前為止時間段
Calendar c = Calendar.getInstance(); //獲取當前時間 right_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd HH:mm:ss"); //calendar設為本年度的一月一號 c.set(c.get(Calendar.YEAR), Calendar.JANUARY, 1); //獲取今年的起始時間 left_time = Time.getDateFormat(c.getTime(), "yyyy-MM-dd ") + "00:00:00";
獲取根據本月日期獲取上個月日期
/** * 根據年月日獲取上一個月的年月日日期 * @param currentDate 傳入yyyy-mm-ss格式的String * @return * String */ public static String getLastDate(String currentDate) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = sdf.parse(currentDate); //dateFormat把String轉換為Date } catch (ParseException e) { e.printStackTrace(); } Calendar c = Calendar.getInstance(); //獲取Calendar實例 c.setTime(date); //將String轉換后的Date傳給Calendar c.add(Calendar.MONTH, -1);//Calendar月份減一 //拼接結果 String lastDate = c.get(Calendar.YEAR) + "-" + ((c.get(Calendar.MONTH) + 1)<10?("0"+(c.get(Calendar.MONTH) + 1)):(c.get(Calendar.MONTH) + 1))+"-"+((c.get(Calendar.DATE))<10?"0"+(c.get(Calendar.DATE)):(c.get(Calendar.DATE))); return lastDate; }
遍歷某月每一天
/** * 遍歷月份的每一天 * @param year 年份 * @param month 月份 */ public static void dateInMonthIterator(int year,int month){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); //設置時間格式 Calendar calendar = Calendar.getInstance(); //得到日歷 calendar.set(year, month-1, 1); //設置年月日,月份從0開始 int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); //獲取當月最大天數 for (int i = 0; i < maxDay; i++) { Date date = calendar.getTime(); String time = sdf.format(date); System.out.println(time); //進行每一天的操作 calendar.add(Calendar.DAY_OF_MONTH, 1); //天數加一操作 } }
