Date類的大多數構造函數和方法都已經拋棄,只留下和毫秒有關的操做,目前經常使用的構造函數函數
經常使用方法spa
設置毫秒數3d
讀取毫秒數code
toString()打印結果orm
//建立日期對象,把當前的毫秒值轉成日期對象 Date date = new Date(1607616000000L); System.out.println(date); //打印結果:Fri Dec 11 00:00:00 CST 2020
DateFormat 是日期/時間格式化子類的抽象類,它以與語言無關的方式格式化並解析日期或時間。日期/時間格式化子類(如 SimpleDateFormat類)容許進行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和標準化。將Date由毫秒轉換爲指定的表現形式。對象
pattern格式blog
當出現y
時,會將y替換成年
文檔
當出現M
時,會將M替換成月
字符串
當出現d
時,會將d替換成日
get
當出現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是日曆類,在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); //天數加一操做 } }