2021-09-10 Math&Date&Calendar类

一、java.lang.Math

java.lang.Math底层封装了很多与数学相关的属性和方法,使用它可以在一定基础上避免程序员自行研发数学方面的代码。


1、Math的两个属性:

①圆周率PI ② 科学计数法E
都是静态常量,可以直接用Math.调用。

2、Math的方法:

1、 Math.abs() :绝对值
2、 Math.max() :最大值
      Math.min() :最小值
3、 Math.random() :随机数
4、 Math.ceil() :向上取整
      Math.floor() :向下取整
5、 [long] round()四舍五入
6、 [double] pow(double a,double b) 求a的b次幂
7、 [double] sqrt(double a)开平方
8、 [double] cbrt(double a)开立方

3、BigDecimal:

为了解决浮点型在计算过程中产生精度丢失问题而使用的类。


BigDecimal构造方法有重载:

1、当( )内为double类型数据时:
即、BigDecimal b = new BigDecimal(double类型);
计算结果会更加不精确= =!

2、当( )内为String类型数据时:
即、BigDecimal b = new BigDecimal(String类型);
计算结果会很精确。
可以通过拼接空字符串""+ 或 String.valueOf实现double到String的转换。


BigDecimal的运算方法:

加法:add()
减法:subtract()
乘法:multiply()
除法:divide(),当除不尽时会抛出算术异常ArithmeticException。
            解决方案:使用重载的divide()方法。
            第一个参数是除数,第二个参数是保留的小数位数,第三个参数是舍入模式。

二、java.util.Date:

需要创建对象的引用 Date date = new Date();
直接输出date : 获取默认系统时间 格林威治时间


1、date.调用常用方法:

1、getTime() 获取1970-1-1零点到现在的毫秒值


2、date.调用过时方法:

1、getYear() 获取年份 获取1900年到现在的年份
2、getMonth() 获取月份 获取自然月-1
3、getDate() 获取日期
4、getDay() 获取星期几
5、getHours() 获取小时
6、getMinutes() 获取分钟
7、getSeconds() 获取秒钟
8、toLocaleString() 换成格式:年月日时分秒

需要注意的是:在Date和Calendar类中的month/MONTH 显示的是对应月份的下标(即从0开始,0-11),在调用或输出时根据情况±1。


3、SimpleDateFormat:

两种数据格式的相互转换:String ←→ Date:

创建SimpleDateFormat对象,传递参数为日期的格式。(y年,M月,d日,H时,m分,s秒 -和:是分隔符,判断不符合格式会抛出异常。)

 [Date] parse(String str)将字符串解析成Date类型
 [String] format(Date date)将Date类型转化为字符串

练习:接收用户输入的日期,计算距离现在有多少天

    //练习:接收用户输入的日期,计算距离现在有多少天
    public static void method2(String str) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date datein = sdf.parse(str);
        System.out.println("获取到的生日是:"+sdf.format(datein));
        long secondin = datein.getTime();
        System.out.println("出生时的毫秒值:"+secondin);
        Date datenow = new Date();
        long nowsecond = datenow.getTime();
        System.out.println("当前维度毫秒值:"+nowsecond);
        long days = (nowsecond-secondin)/24/60/60/1000;
        System.out.println("存活在世的天数:"+days);

    }


三、java.util.Calendar日历类

Calendar类出现于Date类之后,替换掉了许多Date方法,该类将所有可能用到使用到的时间信息都封装为静态成员变量,方便使用。

1、Calendar类创建对象

Calendar类是一个抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar的子类对象,该子类对象是根据当前默认时区和语言环境所获取的。我们国家使用的是java.util.GregorianCalendar阳历。

直接使用类名或对象名调用,获取到的是Calendar类中定义好的静态常量的值,需要使用对象调用get()方法才能获取到该对象所表示的日历中对应的属性值。

        Calendar c = Calendar.getInstance();
        System.out.println(c);
        /*输出内容是:
        [time=1631265613352,areFieldsSet=true,areAllFieldsSet=true,
        lenient=true,zone=sun.util.calendar.ZoneInfo
        [id="Asia/Shanghai",offset=28800000,dstSavings=0,
        useDaylight=false,transitions=29,lastRule=null],
        firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
        YEAR=2021,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,
        DAY_OF_MONTH=10,DAY_OF_YEAR=253,DAY_OF_WEEK=6,
        DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=5,HOUR_OF_DAY=17,
        MINUTE=20,SECOND=13,MILLISECOND=352,ZONE_OFFSET=28800000,DST_OFFSET=0]
         */

2、Calendar类的方法:

1、[int] get(int field) 返回给定义日历字段的值
2、[void] set(int fields,int value) 将指定字段修改为指定字段的值
3、set方法的重载,可以一次性设置多个属性值
4、[void] add(int field,int amount)将给定字段增加或减少指定的值,具体增还是减由第二个参数amount的±决定。

5、Date和Calendar的转换
[Date] getTime() 返回一个表示此Calendar时间值的Date对象
[void] setTime(Date date) 用当前给定的Calendar表示Date所表示的时间

练习: 接收用户从控制台输入的日期,判断概念是否为闰年,该月有多少天,这一天是星期几
     

        //创建SimpleDateFormat设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //创建字符串,转化为date parse()
        Date datein = sdf.parse(strin);
        System.out.println("用户输入的日期为:"+datein);
        //将date转化为calendar setTime()
        Calendar cin = Calendar.getInstance();
        cin.setTime(datein);
        //获得年 get()
        int year = cin.get(Calendar.YEAR);
        //判断平闰年,强转为阳历
        GregorianCalendar gc = (GregorianCalendar) cin;
        if(gc.isLeapYear(year)){
            System.out.println(year+"年是闰年。");
        }
        else{
            System.out.println(year+"年是平年。");
        }
        //获取月份
        int month = cin.get(Calendar.MONTH);
        //获取月份对应天数
        int date = cin.getActualMaximum(Calendar.DAY_OF_MONTH);
        //获取星期几
        int weekday = cin.get(Calendar.DAY_OF_WEEK);
        System.out.println(month+1+"月,这个月有"+date+"天,"+"是星期"+weekday);
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现左右滑动切换日历,你可以在van-calendar组件外层包裹一个容器,并在该容器上绑定`touchstart`、`touchmove`、`touchend`等事件,通过计算手指在屏幕上的移动距离和时间,来判断手指的滑动方向和强度,并根据滑动方向来切换日历的显示日期。 以下是一个简单的实现示例: ```html <template> <div class="calendar-container" @touchstart="handleTouchStart" @touchmove="handleTouchMove" @touchend="handleTouchEnd"> <van-calendar v-model="currentDate" /> </div> </template> <script> export default { data() { return { currentDate: new Date(), startX: 0, startY: 0, startTime: 0, deltaX: 0, deltaY: 0, endTime: 0, }; }, methods: { handleTouchStart(e) { this.startX = e.touches[0].clientX; this.startY = e.touches[0].clientY; this.startTime = new Date().getTime(); this.deltaX = 0; this.deltaY = 0; }, handleTouchMove(e) { this.deltaX = e.touches[0].clientX - this.startX; this.deltaY = e.touches[0].clientY - this.startY; }, handleTouchEnd() { this.endTime = new Date().getTime(); const duration = this.endTime - this.startTime; const absDeltaX = Math.abs(this.deltaX); const absDeltaY = Math.abs(this.deltaY); if (duration < 500 && absDeltaX > 50 && absDeltaX > absDeltaY) { const direction = this.deltaX > 0 ? 'right' : 'left'; const newDate = direction === 'right' ? new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() - 1, 1) : new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() + 1, 1); this.currentDate = newDate; } }, }, }; </script> ``` 这段代码中,我们在`div`容器上绑定了`touchstart`、`touchmove`、`touchend`等事件,分别对应手指触摸、移动和离开屏幕时的操作。在`handleTouchStart`方法中,我们记录下手指触摸时的起始位置和时间,并初始化滑动距离为0。在`handleTouchMove`方法中,我们计算手指在屏幕上的移动距离。在`handleTouchEnd`方法中,我们计算手指离开屏幕时的时间,并判断滑动的时间、距离和方向,如果判断为左右滑动且距离足够大且时间足够短,则切换日历的显示日期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值