java:日期時間類:Date,Calendar,計算類:Math


大家可以關注一下我的博客  我的博客所有隨筆都是我從基礎開始學習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.強烈建議當你需要定義一組常量時,使用枚舉類型*/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM