大家可以關注一下我的博客 我的博客所有隨筆都是我從基礎開始學習java的所有知識點
日期時間類
計算機如何表示時間?
時間戳(timestamp):距離特定時間的時間間隔。
計算機時間戳是指距離歷元(1970-01-01 00:00:00:000)的時間間隔(ms)。
計算機中時間2019-04-29 14:14:00 是該時間距離歷元經過的毫秒數,用long類型存儲。
時間本質上是一個整形。
格林尼治時間(GMT),是一個標准時間,用於全球時間的標准化,也稱世界協調時(UT)。各個國家通過時區偏移來定義各國的標准時間。
中國位於東八區
中國的標准時china standard time = UTC + 08:00
日本的標准時 = UTC + 09:00
package cn.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /*類 Date 表示特定的瞬間,精確到毫秒。 Date 類本質上擁有一個long fastTime屬性的包裝類, 提供了很多屬性和方法用於快速獲取年月日、時分秒。而fastTime就是時間戳。 */ public class Time1 { public static void main(String[] args) { // 創建一個Date對象,表示當前時間 // 根據當前時區、當前語言環境等創建當前時間 Date date1=new Date();//給Date類創建一個對象date1 System.out.println(date1); //輸出結果:Mon Apr 29 20:05:53 CST 2019(星期 月份 天 時:分:秒 當前時區 年 ) // 獲取date1的時間戳(也就是距離計算機時間(歷元(1970-01-01 00:00:00:000))開始到現在總共有多少毫秒) long time1=date1.getTime(); System.out.println(time1);//輸出結果:1556539553501 // 通過時間戳創建Date對象 long time2=0; //也就是距離歷元((1970-01-01 00:00:00:000))0毫秒的時間 也就是計算機時間開始 Date date2 = new Date(time2); System.out.println(date2);//輸出結果:Thu Jan 01 08:00:00 CST 1970 // 需求:請構建一個時間,表示明天的當前時間。 long time3=24*3600*1000+date1.getTime(); Date date3 = new Date(time3); System.out.println(date3); //輸出結果:Tue Apr 30 20:12:54 CST 2019 //比較兩個時間 Date time4=new Date(); Date time5=new Date(time4.getTime()+1000); System.out.println(time4.before(time5)); //結果:true 測試time4是否在time5前 System.out.println(time4.after(time5)); //結果:false 測試time4是否在time5后 System.out.println(time4.compareTo(time5)); //結果:-1 比較兩個時間戳的大小 System.out.println(time4.equals(time5)); //結果:false 比較兩個時間戳是否相等 // setTime:改變Date對象的時間戳 time4.setTime(time4.getTime()+24*3600*1000); System.out.println(time4); //結果:Tue Apr 30 20:27:39 CST 2019(實際時間Mon Apr 29 20:24:50 CST 2019) // 日期格式化->字符串 SimpleDateFormat ti= new SimpleDateFormat(); // [1]使用默認的模式和語言環境 String str1=ti.format(time4); System.out.println(str1);//輸出結果:19-4-30 下午8:31 // [2]使用指定模式 // xxxx年xx月xx日 xx時xx分xx秒 (字母不能亂用,具體請參照開發說明書文檔) SimpleDateFormat ti2 = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); String str2=ti2.format(time4); System.out.println(str2);//輸出結果:2019年04月30日 20時32分48秒 // 修改格式化模式 ti2.applyPattern("yyyy;MM;dd;"); String str3=ti2.format(time4); System.out.println(str3);//輸出結果:2019;04;30; //把String轉換為date的對象 String str = "2019-04-29 15:48:00"; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date=df.parse(str); System.out.println(date); } catch (ParseException e) { e.printStackTrace(); } //輸出結果:Mon Apr 29 15:48:00 CST 2019 } }
package cn.time; import java.util.Calendar; /** * Date本身很多方法在jdk1.1已經過時,jdk推薦使用Calendar取代Date獲取單獨的年、月、日、時、分、秒。 * Calendar是日歷類,本質上內部擁有一個屬性 long time。 表示該日歷所具體的時間戳。 * * 同時Calendar內部通過對time的運算計算出很多日歷字段,把這些日歷字段存在一個容器中, * 並提供set/get方法用於設置或者訪問這些字段。 * * */ public class CalendarTime { public static void main(String[] args) { // 通過工廠設計模式構建一個對象 Calendar cal=Calendar.getInstance();// 使用默認時區和語言環境獲得一個日歷。下面就是日歷信息 System.out.println(cal); /*輸出結果:java.util.GregorianCalendar[time=1556542072427,areFieldsSet=true, areAllFieldsSet=true,lenient=true, *zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0, *useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1, *ERA=1,YEAR=2019,MONTH=3,WEEK_OF_YEAR=18,WEEK_OF_MONTH=5,DAY_OF_MONTH=29,DAY_OF_YEAR=119, *DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=8,HOUR_OF_DAY=20,MINUTE=47,SECOND=52, *MILLISECOND=427,ZONE_OFFSET=28800000,DST_OFFSET=0]*/ //注意:計算機日期都是依西方國家:星期天是第一天 0月代表第一月 // 獲取年 Calendar.YEAR 是 Calendar枚舉中的YEAR 代表着年 System.out.println(cal.get(Calendar.YEAR));//結果:2019 // 獲取月,索引從0開始,0-表示1月 System.out.println(cal.get(Calendar.MONTH));//結果:3 //今月的第幾天 System.out.println(cal.get(Calendar.DAY_OF_MONTH));//結果:29 // 今天的幾時 System.out.println(cal.get(Calendar.HOUR_OF_DAY));//結果:21 //在21時的幾 分 System.out.println(cal.get(Calendar.MINUTE));//結果:4 //在4分的幾 秒 System.out.println(cal.get(Calendar.SECOND));//結果:24 //在24秒鍾的毫秒 System.out.println(cal.get(Calendar.MILLISECOND));//結果:467() // 獲取星期 一周的第一天是周日開始 System.out.println(cal.get(Calendar.DAY_OF_WEEK));//結果:2 // 本月的第一天和本月的最后一天 System.out.println(cal.getActualMinimum(Calendar.DAY_OF_MONTH));//結果:1 System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));//結果:30 // 常用方法 // add(filed,count) 給指定的日歷字段添加/減少count量 cal.add(Calendar.DAY_OF_WEEK, 1);//給今天增加一天輸出 System.out.println(cal.get(Calendar.DAY_OF_WEEK));//結果:3 }
package cn.time; //Math 類包含用於執行基本數學運算的方法。例如,隨機數、平方、立方。 public class Math01 { public static void main(String[] args) { // 常用屬性(圓周率) System.out.println(Math.PI); //輸出結果:3.141592653589793 // 常用方法 // 絕對值(正數) System.out.println(Math.abs(-10));//輸出結果:10 // ceil/floor // 返回比10.1大的最小整數=> 向上取整 System.out.println(Math.ceil(10.1));//輸出結果:11.0 // 返回比10.1小的最大整數=> 向下取整 System.out.println(Math.floor(10.1));//輸出結果:10.0 // max最大值/min最小值 System.out.println(Math.max(10, 20));//輸出結果:20 System.out.println(Math.min(10, 20));//輸出結果:10 // pow(x,y) x的y次方 System.out.println(Math.pow(2, 3));//輸出結果:8.0 // Math.random 隨機數 // 產生[m,n]隨機整數 <=> (int)(Math.random()*(n-m+1)) + m // 四舍五入 System.out.println(Math.round(4.4));//輸出結果:4 // 把弧度轉角度 System.out.println(Math.toDegrees(Math.PI / 2));//輸出結果:90.0 // 把角度轉化成弧度 System.out.println(Math.toRadians(180));//輸出結果:3.141592653589793 // (C)sin(a)/cos(a)/tan(a) System.out.println(Math.sin(Math.toRadians(30)));//輸出結果:0.49999999999999994 // 需求:求兩點之間的距離(x1,y1)-(x2,y2)的距離。 // Math.sqrt(Math.pow((y1-y2), 2)+Math.pow((x1-x2),2)) } }
package cn.time; /*枚舉是由一組固定的常量組成的類型,自定義數據類型。語法: *枚舉的常量值一定是可列舉的有限值。常量值的類型都是public static final *所有枚舉都繼承Eunm,所以省略 *[修飾符] enum enumName{ 常量值1, 常量值2, 常量值3… 常量值n[;] } */ public class Enum1 { public static void main(String[] args) { // 聲明一個Gender枚舉類型的變量gender,並取值為男 Gender gender = Gender.男;//聲明方式 // 枚舉值->字符串 System.out.println(gender.toString());//輸出結果:男 // 字符串-> 枚舉值 String str = "保密"; // 只能轉換枚舉里有的,否則產生IllegalArgumentException 非法參數異常 Gender gender2 = Enum.valueOf(Gender.class, str); System.out.println(gender2);//輸出結果:保密 } //案例:定義一個性別的枚舉類型。 /*Gender 是一種自定義的數據類型,可以用於聲明變量,且變量的取值必須是枚舉值的其中一個。 * gender的值必須是男或者女或者保密。*/ //枚舉可以和其他類放在一起(一般單獨成為一個類似類的存在,我這里為了方便才寫在一起) //java中所有的枚舉類型都繼承於Enum類。可以把枚舉類型看出一個類。 //所有枚舉都繼承Eunm,所以省略class Gender extends Enum{} //枚舉可以聲明方法,但一般我們不使用 public enum Gender{ 男, 女, 保密; } } /*總結 1.只能夠取特定值中的一個 2.使用enum關鍵字 3.所有的枚舉類型隱性地繼承自 java.lang.Enum。 (枚舉實質上還是類!而每個被枚舉的成員實質就是一個枚舉類型的實例,他們默認都是public static final的。 可以直接通過枚舉類型名直接使用它們。) 4.強烈建議當你需要定義一組常量時,使用枚舉類型*/