Java06-7 日期类 Date Calendar

文章介绍了Java中Date类的基本操作,如获取当前日期、时间戳转换,以及废弃的getYear方法。此外,还讲解了如何设置日期、比较日期以及日期格式化类SimpleDateFormat的使用。同时,文章提到了BigDecimal用于高精度计算的特点和方法,包括加减乘除运算以及如何设置精确度。最后,提及了Calendar类在日期处理中的应用。
摘要由CSDN通过智能技术生成

一、日期类 Date Calendar
1.当前日期
Date date = new Date();
System.out.println(date);
2.时间戳    1970 1月1号 00:00:00 到当前时间的毫秒数
long time = date.getTime();     //1665303862926
3.将时间戳转换为Date对象
date = new Date(1000);           //Thu Jan 01 08:00:01 CST 1970

4.获取年份
(方法名上有删除线,该方法已经被废弃,有新的方法替换了它,现在还可以用,将来可能会无法使用)
年份    加上 1900 才是真实的年份
int year = date.getYear() + 1900;     //(122 + 1900 = 2022)
月份    从0开始计数
int month = date.getMonth() + 1;    //9 + 1 = 10
日期
int day = date.getDate();                  //9
星期
int week = date.getDay();                 //0 星期天

int hour = date.getHours();              //16

int minutes = date.getMinutes();      //45

int seconds = date.getSeconds();      //10
时区偏移量        当前时区时间 - 标准时区时间
int timezone = date.getTimezoneOffset();                //-480     -东八区 +西

5.可以通过set设置年月日时分秒 会自动进位
date.setMonth(12);
System.out.println(date);  //Mon Jan 09 16:52:01 CST 2023
比较两个日期     返回值 1代表调用方法的日期更靠后;-1 参数的日期更靠后;0 就代表日期相等
date.compareTo(anotherDate);
返回值为true调用方法的日期在参数日期之前;否则就是在之后
date.before(when);

6.日期的格式化类
   6.1 将Date对象转换为指定格式的字符串
   6.2 将指定格式的日期字符串转换为Date对象
参数为格式    提供了日期的格式化符,将格式化符会显示成时间相关的信息;非格式化符会原样显示
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 'a' hh:mm:ss.SSS E D z");    //"yyyy年MM月dd日 'a' hh:mm:ss.SSS E D"
//日期转字符串
        String date_str = sdf.format(date);
        System.out.println(date_str);        //2022-10-09 a 05:12:06.035 星期日 282
//字符串转换为日期    字符串的形式必须和format指定的形式一致
        sdf = new SimpleDateFormat("yyyy-MM-dd");
        date_str = "1998-07-01";
        date = sdf.parse(date_str);
        System.out.println(date);                           //Wed Jul 01 00:00:00 CST 1998

7.BigDecimal
  7.1 BigDecimal(用来对超过16位有效位的数进行精确的运算,可精确至小数点后55位)
参数推荐使用字符串,不会改变小数的大小
BigDecimal decimal = new BigDecimal(0.1);        //0.10000000000000000555......
decimal = new BigDecimal("0.1");                       //0.1
将BigDecimal对象转换为数字类型
             double a = decimal.intValue();     //(转成字符串)
             Double b = a; 
    decimal.byteValue();
    decimal.shortValue();
    decimal.longValue();
    decimal.floatValue();
    decimal.doubleValue();
 包装类之间 不能像基本数据类型一样,发生隐式转换
     Integer a = 10;
     Double d = a;    //这个会报错 因为Integer并不是Double的子类
     Double e = 10;    //这个也会报错  10会自动装箱为Integer类型
    
  7.2 BigDecimal的四则运算        
    BigDecimal d1 = new BigDecimal("0.1");
    BigDecimal d2 = new BigDecimal("0.2");

    BigDecimal result = d1.add(d2);    //0.3
    result = d1.subtract(d2);                //-0.1
    result = d1.multiply(d2);                //0.02
    result = d1.divide(d2);                   //0.5        
BigDecimal的比较大小
返回值为1 代表d1大于d2;0 d1 == d2;-1 d1 < d2;
    d1.compareTo(d2);    //(compareTo皆comparable接口)        

  7.3 BigDecimal精确度的设置
小数位保留10位,位数不够,低位补零
    MathContext mc = new MathContext(10);
    decimal = new BigDecimal(0.1235,mc);
设置精确度,如果decimal的位数超过了设置的精确位数,就需要指定进位方式
    decimal.setScale(3);    //报错
保留n位小数,将该数字先乘以10的n次幂,先通过Math对应的方法计算出结果,再除以10的n次幂就是最终的结果
ROUND_UP/ROUND_CEILING:向上取整
ROUND_DOWN/ROUND_FLOOR:向下取整
ROUND_HALF_UP:四舍五入
ROUND_HALF_DOWN:小数位 大于0.5时就向上取整;否则向下取整
ROUND_HALF_EVEN:找离该数字最近的整数,如果一样近时,取偶数
            decimal = decimal.setScale(3, BigDecimal.ROUND_UP);
            System.out.println(decimal);    //向上取整    0.124
            // 0.12351 * 1000 = 123.51         0.51>0.5    = 124 / 1000 = 0.124

8.DecimalFormat
NumberFormat:多用于货币场景

9.Calendar
使用Calendar的静态方法getInstance()实例化对象
Calendar c = Calendar.getInstance();
c.setTime();
c.setTimeInMillis();
c.setTimeZone();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值