美文网首页
Calendar类的一些辅助功能和API

Calendar类的一些辅助功能和API

作者: 红茶炒饭 | 来源:发表于2019-01-22 19:59 被阅读0次

API

 //获得Calendar这个类的实例:
        Calendar c = Calendar.getInstance();

 String TAG = "我来看看";

        Calendar c = Calendar.getInstance();

        //获得当前的年份
        int year = c.get(Calendar.YEAR);
        Log.e(TAG, "年份:"+year);
        //获得当前的月份 //注意:  1 月份的值为0,需加1为现实中月份
        int month = c.get((Calendar.MONTH)) + 1;
        Log.e(TAG, "月份:"+month);


        //获得今天是本月的第几天,两种写法
        int date = c.get(Calendar.DATE);
        int day = c.get(Calendar.DAY_OF_MONTH);
        Log.e(TAG, "date:"+date);
        Log.e(TAG, "day:"+day);


        //获得今天是本年的第几天
        int num = c.get(Calendar.DAY_OF_YEAR);
        Log.e(TAG, "获得今天是本年的第几天: "+num );

        //获得今天在本月的第几周
        int i1 = c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
        Log.e(TAG, "获得今天在本月的第几周: "+i1 );


        //获得今天是周几
        int i2 = c.get(Calendar.DAY_OF_WEEK)-1;
        Log.e(TAG, "获得今天是周几: "+i2 );


        //获得几点,12小时制
        int i3 = c.get(Calendar.HOUR);
        Log.e(TAG, "获得几点,12小时制: "+i3 );


        //需要区分是上午还是下午
        int i = c.get(Calendar.AM_PM);
        Log.e(TAG, "需要区分是上午还是下午: "+i );


        //上午
        int am = Calendar.AM;
        Log.e(TAG, "上午: "+am);

        //下午
        int pm = Calendar.PM;
        Log.e(TAG, "下午: "+pm);


        //获取24小时制时间的方法
        int i4 = c.get(Calendar.HOUR_OF_DAY);
        Log.e(TAG, "获取24小时制时间的方法: "+i4 );


        //获得现在是几分
        int i5 = c.get(Calendar.MINUTE);
        Log.e(TAG, "获得现在是几分: "+i5);


        //一下add方法的设定会影响最终的输出结果  如果不重置将会一直存续下去 用这个方法我们可以切换 地域 或者是定时
        // 10分钟以后
        c.add(Calendar.MINUTE, 10);
        int i15 = c.get(Calendar.MINUTE);
        Log.e(TAG, "10分钟以后: "+i15);

        // 30分钟前
        c.add(Calendar.MINUTE, -30);
        Log.e(TAG, "30分钟前: "+i15);


        // 设定1小时以后,前者大,显示 1
        c.add(Calendar.HOUR, +1);

        // 退回 2 小时,时间相同,显示 0
        c.add(Calendar.HOUR, -2);

        //增加日期中的某个域的值,比如想获得明天的日期,就需要向DAY域加1
        c.add(Calendar.DAY_OF_MONTH, +1);

        // 重置 Calendar 显示当前时间
        c.setTime(new Date());


        //获得现在是几秒
        int i6 = c.get(Calendar.SECOND);
        Log.e(TAG, "获得现在是几秒: "+i6);

        //获得现在是几毫秒
        int i7 = c.get(Calendar.MILLISECOND);
        Log.e(TAG, "获得现在是几毫秒: "+i7 );


        //SimpleDateFormat来输出规范的字符串
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd");
        String format = sdf.format(c.getTime());
        Log.e(TAG, "格式化输出: "+format );


        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format1 = sdf2.format(c.getTime());
        Log.e(TAG, "格式化输出: "+format1 );

        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
        String format2 = sdf3.format(c.getTime());
        Log.e(TAG, "格式化输出: "+format2);


        String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
        Log.e(TAG, "完整显示今天时间: "+str );



        // 重置 Calendar 显示当前时间
        c.setTime(new Date());
        str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(c.getTime());


        //比较时间
        Calendar c2 = Calendar.getInstance();
        Calendar d2 = Calendar.getInstance();
        d2.add(Calendar.DAY_OF_MONTH, 1);
        //比较两个日期哪个更靠后
        boolean after = d2.after(c2);
        //比较两个日期哪个更靠前
        boolean before = c2.before(d2);
        Log.e(TAG, "比较两个日期哪个更靠后: "+after );
        Log.e(TAG, "比较两个日期哪个更靠前: "+before );


        //要求两个参与比较的字符串的形式及长度必须相同才能够正确比较,否则,比较结果是错的.
        String a="2019-10-12";
        String b="2019-10-21";
        int result=a.compareTo(b);
        int result2=b.compareTo(a);
        //1 比目标大   -1比 目标小   0相等
        Log.e(TAG, "String中方法compareTo: "+result +"and"+result2);



        SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date parse = sdf4.parse("2019-05-31 12:36:44");
            Date parse1 = sdf4.parse("2019-05-31 12:36:55");
            Log.e(TAG, "data比大小: "+(parse.getTime() > parse1.getTime() ));
        } catch (ParseException e) {
            e.printStackTrace();
        }

        String f = sdf2.format("2019-05-31 12:36:44");


        //比较两个日期是否相等
        Calendar c1 = Calendar.getInstance();
        Calendar d1 = Calendar.getInstance();
        c1.equals(d1);        //true
        c1.add(Calendar.YEAR, 1);
        c1.equals(d1);        //false






        //清空某一个域并用这个域最小的值代替
        c.clear(Calendar.MONTH);
        //清空所有的域然后全部用最小的值代替
        //1970.1.1 00.00
        c.clear();

        //获得Calendar对象的一个深拷贝,独立于拷贝对象
        c = (Calendar) c.clone();
        sdf.format(c.getTime());

        //比较两个Calendar哪个在前哪个在后的方法
        //c实例要靠前一些,返回-1,如果要靠后一些,返回1,如果相等,返回0
        c = (Calendar) c.clone();
        c.compareTo(c);


时间.png

拓展:一个简单的运用 防止连点

这个工具类


    public abstract class NoDoubleClickListener implements View.OnClickListener {

    private final  long lastClickTime=0;   //最后一次点击事件的时间
    public  final int MIN_CLICK_DELAY_TIME=1500; //单位毫秒

    public abstract void onNoDoubleClick(View view);    //创建一个抽象方法 用来再次回调事件

    @Override
    public void onClick(View v) {

        Calendar c = Calendar.getInstance();//实例化
        long currentTime=   c.getTimeInMillis();
        /*
         c.getTimeInMillis();  
         返回了一个long 类型的值
         格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000到Calendar对象表示的时间之间的毫秒数
         除以  1000/60/60/24/365   获取年数 ~
        */
        if (currentTime - lastClickTime >= MIN_CLICK_DELAY_TIME) {
            lastClickTime=currentTime;
            onNoDoubleClick(v);
        }
    }

}

具体的效果如图

当快速点击时 时间戳 小于1500 所以不会触发if条件

相关文章

网友评论

      本文标题:Calendar类的一些辅助功能和API

      本文链接:https://www.haomeiwen.com/subject/yzmrjqtx.html