Calendar和异常处理

这篇博客介绍了Java中的日期类型,包括Date、Calendar及其转换,并展示了如何使用SimpleDateFormat进行日期格式化和解析。此外,还讲解了Calendar的set和get方法的使用技巧以及异常处理机制,包括try-catch-finally和throws关键字的应用。

**
java日期类型
日期的表现格式

  1. Date类型的时间: Date date=new Date();
  2. long类型的时间: 系统从1970到当前的一个毫秒值
  3. Calendar类型的时间
    抽象类,不可以被实例化,只能实例化子类对象
    使用静态工厂获取Calender对象

日期的格式化和解析

  • 使用simpleDateFormat:实现日期转字符串(格式化),以及字符串转为日期(解析)

Calendar常用方法:

  1. public int get(int field); 返回给定日历字段的值

  2. public abstract void add(int field,int amount);//根据日历的规则对指定的时间字段进行添加或删除给定的值

  3. public Date getTime(); 将Calendar类型转化为Date类型

  4. public final void set(int year,int month,int date);设置指定的日期,注意里面的参数类型是int类型,不是String类型,月份是从零开始的,即0-11

    **


import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


public class CalendarDemo01 {
    public static void main(String[] args) {
        Calendar c1=Calendar.getInstance();
        //System.out.println(c1);//格式化和解析
        //SimpleDateFormat将Date类型的日期,转化为String

        // 将Calendar转为Date
        Date d=c1.getTime();
        //格式化是将Date的时间转换为字符串
        SimpleDateFormat sdf=new SimpleDateFormat(("yyyy/MM/dd HH:mm:ss"));
        System.out.println(sdf.format(d));

        c1.add(Calendar.DAY_OF_WEEK,-14);
        Date d1=c1.getTime();
        System.out.println(sdf.format(d1));

        c1.set(2000,1,27);
        Date d3=c1.getTime();
        System.out.println(d3);
    }
}

Calendar的set和get的使用小技巧

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalendarTest01 {
    public static void main(String[] args) {
        //如何使用Calendar来实现判断一年某一个月有多少天(2000.2)
        //1.调用Calendar中的set设置年月日,设置为2000年3月1
        Calendar c1=Calendar.getInstance();
        c1.set(2000,2,1);
        //2.对天数进行减一
        c1.add(Calendar.DATE,-1);
        Date d3=c1.getTime();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        System.out.println(sdf.format(d3));
        //3.直接获取天数并输入
        System.out.println(c1.get(Calendar.DATE));

    }
}

异常:程序出现了不正常的情况

  • 异常体系:

    • Error:严重问题,不需要处理(java虚拟机无法解决的严重问题,资源耗尽,jvm系统内部出错
    • Exception:异常类,它表示本身可以处理的问题
    • RuntimeException(运行时异常)
    • 非RuntimeException(编译时异常)
      在编译时必须处理,否者程序不能通过编译,就不能执行了
  1. 编译期异常处理机制一:try-catch-finally:捕获异常

       try{
            捕获异常第一步,将可能出现的异常代码都放在try中
       }
       catch(Exception e){
            在catch中对异常进行处理
       }
       finally{
            不管上述是否发生异常,都要执行该代码块
       }
       多个异常关系,如果没有关系,谁在前谁在后没有关系
       如果有关系,子在前,父在后
    
  2. 编译期异常处理机制二:throws(抛出异常:自己不处理,谁调用谁处理)

       throws Exception  写在方法的声明处,指明方法在执行时,可能会出现异常
       一旦方法体执行,出现这个异常,调用者需要处理这个异常
    

格式可以参考如下:
异常处理机制一:

public static void main(String[] args){
        String s="198/01/09 13:14:52";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

        try {
            Date date=sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

异常处理机制二:

public static void main(String[] args) throws ParseException {
        String s="198/01/09 13:14:52";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date=sdf.parse(s);
    }
在 QML 中显示 `Calendar` 时出现闪屏问题,通常与界面渲染机制、资源加载顺序以及窗口状态管理有关。以下是一些针对性的解决方案: ### 设置文本渲染方式避免视觉异常 QML 默认使用 OpenGL 渲染文本,但在某些设备或图形驱动上可能会导致文本模糊或界面闪烁。可以通过设置文本渲染类型为原生渲染来缓解这一问题: ```cpp QQuickWindow::setTextRenderType(QQuickWindow::NativeTextRendering); ``` 此方法可避免因硬件加速渲染文本引起的视觉异常,适用于部分定制系统环境下的界面稳定性优化[^2]。 ### 控制组件可见性与加载顺序 在 QML 页面中存在多个视图组件的情况下,即使将某些组件的 `visible` 属性设为 `false`,也可能因为渲染顺序不当而引发闪屏现象。可以采用 `Loader` 延迟加载非关键组件,并确保日历组件优先完成初始化显示: ```qml Loader { id: calendarLoader sourceComponent: calendarContent } Component { id: calendarContent Calendar { // 日历配置 } } ``` 通过延迟加载策略,减少初始界面复杂度,有助于避免多个视图同时加载时产生的渲染冲突[^1]。 ### 管理窗口状态与动画过渡 在切换窗口状态(如最大化、最小化)时,若未正确处理窗口属性,也可能导致界面短暂闪烁。可以结合窗口状态判断逻辑,确保切换操作仅在窗口具备可调整大小的前提下执行: ```qml Item { property var win: Window.window property bool isRestore: win && Window.Maximized === win.visibility property bool resizable: win && !(win.minimumHeight === win.maximumHeight && win.maximumWidth === win.minimumWidth) MouseArea { onClicked: { if (!resizable) return; if (win.visibility === Window.Maximized) { win.showNormal(); } else { win.showMaximized(); } } } } ``` 这种方式可以在窗口状态变化时提供更稳定的视觉体验,防止因布局重绘导致的短暂闪屏[^3]。 ### 使用占位符避免空白帧 在日历组件尚未完全加载前,使用简单的占位符(如纯色背景或文字提示)替代实际内容,可以有效避免界面空白帧带来的闪烁感: ```qml Loader { id: calendarLoader sourceComponent: loadingPlaceholder } Component { id: loadingPlaceholder Rectangle { width: parent.width height: parent.height color: "#EEE" Text { text: "Loading Calendar..." } } } // 在数据准备完成后切换为实际日历内容 calendarLoader.sourceComponent = calendarContent ``` 该方法适用于资源加载时间较长的场景,能显著提升用户感知流畅度。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值