Java的面向?qū)ο缶幊?/a>">Java的面向?qū)ο缶幊?/a>
589
2025-04-01
時間
jdk 8之前的日期時間的API
1. System類中currentTimeMillis();
2. java.util.Date和子類java.sql.Date
3. SimpleDateFormat
4. Calendar
1.兩個構(gòu)造器的使用
>構(gòu)造器1: Date():創(chuàng)建一個對應(yīng)當前時間的Date對象 #空參構(gòu)造器
>構(gòu)造器2: 創(chuàng)建指定毫秒數(shù)的Date對象; #傳入一個時間戳
2.兩個方法的使用
>toString():顯示當前的年、月、日、時、分、秒
>getTime():獲取當前Date對象對應(yīng)的毫秒數(shù)。(時間戳)
3. java.sql.Date對應(yīng)著數(shù)據(jù)庫中的日期類型的變量
>如何實例化
>如何將java.util.Date對象轉(zhuǎn)換為java.sql.Date對象
//構(gòu)造器一:Date():創(chuàng)建一個對應(yīng)當前時間的Date對象 Date date1 = new Date(); System.out.println(date1); //默認調(diào)用 .toString() 方法 //Sat Feb 16 16:35:31 GMT+08:00 2019 () System.out.println(date1.getTime()); //1550306204104 轉(zhuǎn)為時間戳 //構(gòu)造器二:創(chuàng)建指定毫秒數(shù)的Date對象 Date date2 = new Date(155030620410L); System.out.println(date2.toString()); //創(chuàng)建java.sql.Date對象 java.sql.Date date3 = new java.sql.Date(35235325345L); # new java.sql.Date(時間戳) -構(gòu)造器,無空參構(gòu)造器 System.out.println(date3);//1971-02-13 //如何將java.util.Date對象轉(zhuǎn)換為java.sql.Date對象 Date date6 = new Date(); # java.util.Date java.sql.Date date7 = new java.sql.Date(date6.getTime()); # 傳入時間戳
SimpleDateFormat的使用:SimpleDateFormat對日期Date類的格式化和解析
1.兩個操作?格式化 (日期 --->字符串) ——?解析 (格式化的逆過程,字符串 ---> 日期)
2.SimpleDateFormat的實例化
//實例化SimpleDateFormat:使用默認的構(gòu)造器??SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:日期 --->字符串
//解? 析:格式化的逆過程,字符串 ---> 日期
public class DateTest1 { public static void main(String[] args) throws ParseException { java.util.Date date = new java.util.Date(); //按照指定的方式格式化和解析:調(diào)用帶參的構(gòu)造器 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //格式化 日期 --> 字符串 String format1 = sdf1.format(date); System.out.println(format1);//2021-06-06 05:24:13 //解析: 字符串 --> 日期 //要求字符串必須是符合SimpleDateFormat識別的格式(通過構(gòu)造器參數(shù)體現(xiàn)),否則,拋異常 Date date2 = sdf1.parse("2021-12-12 23:11:11"); System.out.println(date2); //Sun Dec 12 23:11:11 CST 2021 } }
Calendar日歷類(抽象類)的使用
public void testCalendar(){ //1.實例化 //方式一:創(chuàng)建其子類(GregorianCalendar)的對象 //方式二:調(diào)用其靜態(tài)方法getInstance() Calendar calendar = Calendar.getInstance(); // System.out.println(calendar.getClass()); //2.常用方法 //get() int days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days); System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //set() //calendar可變性 calendar.set(Calendar.DAY_OF_MONTH,22); days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days); //add() calendar.add(Calendar.DAY_OF_MONTH,-3); days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days); //getTime():日歷類---> Date Date date = calendar.getTime(); System.out.println(date); //setTime():Date ---> 日歷類 Date date1 = new Date(); calendar.setTime(date1); days = calendar.get(Calendar.DAY_OF_MONTH); System.out.println(days); }
jdk 8之后的日期時間的API測試
LocalDate、LocalTime、LocalDateTime
Instant的使用 類似于 java.util.Date類
DateTimeFormatter:格式化或解析日期、時間
public class LocalDateTimeTest { @Test public void test1(){ //now():獲取當前的日期、時間、日期+時間 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); //of():設(shè)置指定的年、月、日、時、分、秒。沒有偏移量 LocalDateTime localDateTime1 = LocalDateTime.of(2021, 10, 6, 13, 23, 43); System.out.println(localDateTime1); //2021-10-06T13:23:43 //getXxx():獲取相關(guān)的屬性 System.out.println(localDateTime.getDayOfMonth()); System.out.println(localDateTime.getDayOfWeek()); System.out.println(localDateTime.getMonth()); System.out.println(localDateTime.getMonthValue()); System.out.println(localDateTime.getMinute()); //體現(xiàn)不可變性 //withXxx():設(shè)置相關(guān)的屬性 LocalDate localDate1 = localDate.withDayOfMonth(22); System.out.println(localDate); System.out.println(localDate1); LocalDateTime localDateTime2 = localDateTime.withHour(4); System.out.println(localDateTime); System.out.println(localDateTime2); //不可變性 LocalDateTime localDateTime3 = localDateTime.plusMonths(3); System.out.println(localDateTime); System.out.println(localDateTime3); LocalDateTime localDateTime4 = localDateTime.minusDays(6); System.out.println(localDateTime); System.out.println(localDateTime4); } @Test public void test2(){ //now():獲取本初子午線對應(yīng)的標準時間 Instant instant = Instant.now(); System.out.println(instant);//2021-06-06T10:57:20.553Z //添加時間的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(offsetDateTime);//2021-06-06T18:57:20.553+08:00 //toEpochMilli():獲取自1970年1月1日0時0分0秒(UTC)開始的毫秒數(shù) ---> Date類的getTime() long milli = instant.toEpochMilli(); System.out.println(milli); //1622977040553 //ofEpochMilli():通過給定的毫秒數(shù),獲取Instant實例 -->Date(long millis) Instant instant1 = Instant.ofEpochMilli(1550475314878L); System.out.println(instant1); //2019-02-18T07:35:14.878Z } @Test public void test3(){ // 重點: 方式三:自定義的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”) DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化 String str4 = formatter3.format(LocalDateTime.now()); // 傳入TemporalAccessor System.out.println(str4);//2021-06-06 07:01:36 //解析 TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09"); System.out.println(accessor); //{SecondOfMinute=9, NanoOfSecond=0, MicroOfSecond=0, MinuteOfHour=52, MilliOfSecond=0, HourOfAmPm=3},ISO resolved to 2019-02-18 } }
Comparable接口與Comparator的使用的對比:
Comparable接口的方式一旦確定,保證Comparable接口實現(xiàn)類的對象在任何位置都可以比較大小。
Comparator接口屬于臨時性的比較。
Comparable接口的使用舉例:??自然排序
1.像String、包裝類等實現(xiàn)了Comparable接口,重寫了compareTo(obj)方法,給出了比較兩個對象大小的方式,例:String?重寫compareTo()?從小到大排列。
2.重寫compareTo(obj)的規(guī)則:
如果當前對象this大于形參對象obj,則返回正整數(shù),
如果當前對象this小于形參對象obj,則返回負整數(shù),
如果當前對象this等于形參對象obj,則返回零。
3.對于自定義類來說,如果需要排序,我們可以讓自定義類實現(xiàn)Comparable接口,重寫compareTo(obj)方法。在compareTo(obj)方法中指明如何排序
public void test2(){ Goods[] arr = new Goods[5]; arr[0] = new Goods("lenovoMouse",34); arr[1] = new Goods("dellMouse",43); arr[2] = new Goods("xiaomiMouse",12); arr[3] = new Goods("huaweiMouse",65); arr[4] = new Goods("microsoftMouse",43); Arrays.sort(arr); System.out.println(Arrays.toString(arr)); } public class Goods implements Comparable{ private String name; private double price; public Goods() { } public Goods(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Goods{" + "name='" + name + '\'' + ", price=" + price + '}'; } //指明商品比較大小的方式:按照價格從低到高排序,再按照產(chǎn)品名稱從高到低排序 @Override public int compareTo(Object o) { // System.out.println("**************"); if(o instanceof Goods){ Goods goods = (Goods)o; //方式一: if(this.price > goods.price){ return 1; }else if(this.price < goods.price){ return -1; }else{ // return 0; return -this.name.compareTo(goods.name); } //方式二: // return Double.compare(this.price,goods.price); } // return 0; throw new RuntimeException("傳入的數(shù)據(jù)類型不一致!"); } }
Comparator接口的使用:定制排序
1.背景:
當元素的類型沒有實現(xiàn)java.lang.Comparable接口而又不方便修改代碼,或者實現(xiàn)了java.lang.Comparable接口的排序規(guī)則不適合當前的操作,
那么可以考慮使用 Comparator 的對象來排序
2.重寫compare(Object o1,Object o2)方法,比較o1和o2的大?。?/p>
如果方法返回正整數(shù),則表示o1大于o2;
如果返回0,表示相等;
返回負整數(shù),表示o1小于o2
public class CompareTest { @Test public void test1(){ Goods[] arr = new Goods[5]; arr[0] = new Goods("lenovoMouse",34); arr[1] = new Goods("dellMouse",43); arr[2] = new Goods("xiaomiMouse",12); arr[3] = new Goods("huaweiMouse",65); arr[4] = new Goods("microsoftMouse",43); Comparator goodsComparator = new Comparator() { @Override public int compare(Object o1, Object o2) { if (o1 instanceof Goods && o2 instanceof Goods){ Goods g1 = (Goods)o1; Goods g2 = (Goods)o2; return -Double.compare(g1.getPrice(), g2.getPrice()); }else throw new RuntimeException("輸入類型不對"); } }; Arrays.sort(arr, goodsComparator); System.out.println(Arrays.toString(arr)); } }
public class SystemTest { /* System類 System類代表系統(tǒng),系統(tǒng)級的很多屬性和控制方法都放置在該類的內(nèi)部。 該類位于java.lang包。 由于該類的構(gòu)造器是private的,所以無法創(chuàng)建該類的對象,也就是無法實 例化該類。其內(nèi)部的成員變量和成員方法都是static的,所以也可以很方便 的進行調(diào)用。 成員變量 System類內(nèi)部包含in、out和err三個成員變量,分別代表標準輸入流 (鍵盤輸入),標準輸出流(顯示器)和標準錯誤輸出流(顯示器)。 成員方法 native long currentTimeMillis(): 該方法的作用是返回當前的計算機時間,時間的表達格式為當前計算機時 間和GMT時間(格林威治時間)1970年1月1號0時0分0秒所差的毫秒數(shù)。 void exit(int status): 該方法的作用是退出程序。其中status的值為0代表正常退出,非零代表 異常退出。使用該方法可以在圖形界面編程中實現(xiàn)程序的退出功能等 void gc(): 該方法的作用是請求系統(tǒng)進行垃圾回收。至于系統(tǒng)是否立刻回收,則 取決于系統(tǒng)中垃圾回收算法的實現(xiàn)以及系統(tǒng)執(zhí)行時的情況。 String getProperty(String key): 該方法的作用是獲得系統(tǒng)中屬性名為key的屬性對應(yīng)的值。系統(tǒng)中常見 的屬性名以及屬性的作用如下表所示: */ @Test public void test1() { String javaVersion = System.getProperty("java.version"); System.out.println("java的version:" + javaVersion); String javaHome = System.getProperty("java.home"); System.out.println("java的home:" + javaHome); String osName = System.getProperty("os.name"); System.out.println("os的name:" + osName); String osVersion = System.getProperty("os.version"); System.out.println("os的version:" + osVersion); String userName = System.getProperty("user.name"); System.out.println("user的name:" + userName); String userHome = System.getProperty("user.home"); System.out.println("user的home:" + userHome); String userDir = System.getProperty("user.dir"); System.out.println("user的dir:" + userDir); } /* BigInteger類 Integer類作為int的包裝類,能存儲的最大整型值為231-1,Long類也是有限的, 最大為263-1。如果要表示再大的整數(shù),不管是基本數(shù)據(jù)類型還是他們的包裝類 都無能為力,更不用說進行運算了。 java.math包的BigInteger可以表示不可變的任意精度的整數(shù)。BigInteger 提供 所有 Java 的基本整數(shù)操作符的對應(yīng)物,并提供 java.lang.Math 的所有相關(guān)方法。 另外,BigInteger 還提供以下運算:模算術(shù)、GCD 計算、質(zhì)數(shù)測試、素數(shù)生成、 位操作以及一些其他操作。 構(gòu)造器 BigInteger(String val):根據(jù)字符串構(gòu)建BigInteger對象 常用方法 public BigInteger abs():返回此 BigInteger 的絕對值的 BigInteger。 BigInteger add(BigInteger val) :返回其值為 (this + val) 的 BigInteger BigInteger subtract(BigInteger val) :返回其值為 (this - val) 的 BigInteger BigInteger multiply(BigInteger val) :返回其值為 (this * val) 的 BigInteger BigInteger divide(BigInteger val) :返回其值為 (this / val) 的 BigInteger。整數(shù) 相除只保留整數(shù)部分。 BigInteger remainder(BigInteger val) :返回其值為 (this % val) 的 BigInteger。 BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟 (this % val) 的兩個 BigInteger 的數(shù)組。 BigInteger pow(int exponent) :返回其值為 (thisexponent) 的 BigInteger */ /* BigDecimal類 一般的Float類和Double類可以用來做科學計算或工程計算,但在商業(yè)計算中, 要求數(shù)字精度比較高,故用到j(luò)ava.math.BigDecimal類。 ? BigDecimal類支持不可變的、任意精度的有符號十進制定點數(shù)。 構(gòu)造器 public BigDecimal(double val) public BigDecimal(String val) 常用方法 public BigDecimal add(BigDecimal augend) public BigDecimal subtract(BigDecimal subtrahend) public BigDecimal multiply(BigDecimal multiplicand) public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) */ @Test public void test2() { BigInteger bi = new BigInteger("1243324112234324324325235245346567657653"); BigDecimal bd = new BigDecimal("12435.351"); BigDecimal bd2 = new BigDecimal("11"); System.out.println(bi); // System.out.println(bd.divide(bd2)); System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP)); System.out.println(bd.divide(bd2, 25, BigDecimal.ROUND_HALF_UP)); } }
Java
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。