Android中Calendar类的用法总结[通俗易懂]

Android中Calendar类的用法总结[通俗易懂]Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了。

在获取时间之前要先获得Calendar这个类的实例:

private Calendar c = Calendar.getInstance();

然后就可以用这个变量来获取时间了。

获得当前的年份

Log.i("MainActivityFilter", "当前的年份为:" + c.get(Calendar.YEAR));

Android中Calendar类的用法总结[通俗易懂]

获得当前的月份

Log.i("MainActivityFilter", "当前的月份为:" + (c.get(Calendar.MONTH) + 1));

Android中Calendar类的用法总结[通俗易懂]

这个要特别注意一下,月份在Calendar中是从0开始的,也就是说1月份的值为0,因此需要加1才是现实中表示的月份

获得今天是本月的第几天,有两种写法,结果是一样的

Log.i("MainActivityFilter", "DATE:" + c.get(Calendar.DATE));
Log.i("MainActivityFilter", "DAY_OF_MONTH:" + c.get(Calendar.DAY_OF_MONTH));

Android中Calendar类的用法总结[通俗易懂]

获得今天是本年的第几天

Log.i("MainActivityFilter", "今天是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");

Android中Calendar类的用法总结[通俗易懂]

获得今天在本月的第几周

Log.i("MainActivityFilter", "今天在本月的第" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");

Android中Calendar类的用法总结[通俗易懂]

获得今天是周几,这里不能直接将返回值当做周几,而应该与Calendar用于表示周几的常量搭配使用,返回值为3不代表今天是周三

    private void printDayOfWeek() {
        switch (c.get(Calendar.DAY_OF_WEEK)) {
            case Calendar.SUNDAY:
                Log.i("MainActivityFilter", "今天是周日");
                break;
            case Calendar.MONDAY:
                Log.i("MainActivityFilter", "今天是周一");
                break;
            case Calendar.TUESDAY:
                Log.i("MainActivityFilter", "今天是周二");
                break;
            case Calendar.WEDNESDAY:
                Log.i("MainActivityFilter", "今天是周三");
                break;
            case Calendar.THURSDAY:
                Log.i("MainActivityFilter", "今天是周四");
                break;
            case Calendar.FRIDAY:
                Log.i("MainActivityFilter", "今天是周五");
                break;
            case Calendar.SATURDAY:
                Log.i("MainActivityFilter", "今天是周六");
                break;
            default:
                break;
        }
    }

Android中Calendar类的用法总结[通俗易懂]

获得今天是几点,12小时制

Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR) + "点");

Android中Calendar类的用法总结[通俗易懂]

但现在其实是下午三点,所以需要区分是上午还是下午

        if (c.get(Calendar.AM_PM) == Calendar.AM) {
            Log.i("MainActivityFilter", "现在是上午");
        } else {
            Log.i("MainActivityFilter", "现在是下午");
        }

使用Calendar.AM和Calendar.PM来帮助判断是上午还是下午,如果c.get(Calendar.AM_PM)获取到的值和Calendar.AM相等就是上午,如果和Calendar.PM相等就是下午

Android中Calendar类的用法总结[通俗易懂]

Calendar也提供了获取24小时制时间的方法

Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR_OF_DAY) + "点");


Android中Calendar类的用法总结[通俗易懂]

获得现在是几分

Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MINUTE) + "分");

Android中Calendar类的用法总结[通俗易懂]

获得现在是几秒

Log.i("MainActivityFilter", "现在是" + c.get(Calendar.SECOND) + "秒");

Android中Calendar类的用法总结[通俗易懂]

获得现在是几毫秒

Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MILLISECOND) + "毫秒");

Android中Calendar类的用法总结[通俗易懂]

Calendar虽然不提供显示规范格式时间的方法,但是可以用SimpleDateFormat来输出规范的字符串,这里简单示范一下用法

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Log.i("MainActivityFilter", sdf.format(c.getTime()));

Android中Calendar类的用法总结[通俗易懂]

关于SimpleDateFormat的更详细的用法之后会用另外一篇文章来讲

Calendar还提供了一些其它的方法,接下来关于时间的输出都是用SimpleDateFormat来输出的,就不贴输出的代码了。

增加日期中的某个域的值,比如想获得明天的日期,就需要向DAY域加1

Android中Calendar类的用法总结[通俗易懂]

c.add(Calendar.DAY_OF_MONTH, 1);

加之前

Android中Calendar类的用法总结[通俗易懂]

加之后

Android中Calendar类的用法总结[通俗易懂]

这样对程序员就比较方便,不用去考虑各种界限的问题

比较两个日期是否相等

Android中Calendar类的用法总结[通俗易懂]

private Calendar c = Calendar.getInstance();
private Calendar d = Calendar.getInstance();
Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
c.add(Calendar.YEAR, 1);
Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));

Android中Calendar类的用法总结[通俗易懂]

比较两个日期哪个更靠后一些

Android中Calendar类的用法总结[通俗易懂]

private Calendar c = Calendar.getInstance();
private Calendar d = Calendar.getInstance();
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");

d.add(Calendar.DAY_OF_MONTH, 1);
Log.i("MainActivityFilter", "d在c后面:" + d.after(c));

Android中Calendar类的用法总结[通俗易懂]

同样,有方法可以用来判断两个日期哪个更靠前

Android中Calendar类的用法总结[通俗易懂]

Log.i("MainActivityFilter", "c在d前面:" + c.before(d));

Android中Calendar类的用法总结[通俗易懂]

清空某一个域并用这个域最小的值代替和清空所有的域然后全部用最小的值代替

Android中Calendar类的用法总结[通俗易懂]

c.clear(Calendar.MONTH);
d.clear();

Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

Android中Calendar类的用法总结[通俗易懂]

获得Calendar对象的一个深拷贝

Android中Calendar类的用法总结[通俗易懂]

d = (Calendar) c.clone();

Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
        
c.add(Calendar.YEAR, 1);

Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

Android中Calendar类的用法总结[通俗易懂]

比较两个Calendar哪个在前哪个在后的方法

Android中Calendar类的用法总结[通俗易懂]

如果调用这个方法的Calendar实例比参数给出的Calendar实例要靠前一些,返回-1,如果要靠后一些,返回1,如果相等,返回0

d = (Calendar) c.clone();

Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));

c.add(Calendar.YEAR, 1);

Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));

d.add(Calendar.YEAR, 2);

Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));

Android中Calendar类的用法总结[通俗易懂]

将当前Calendar对象转换为Date对象

Android中Calendar类的用法总结[通俗易懂]

为Calendar对象的域设置值的一些方法

Android中Calendar类的用法总结[通俗易懂]

还有将Date对象设置给Calendar对象的方法

Android中Calendar类的用法总结[通俗易懂]

Calendar还提供了一些关于时区,地域方面的方法,还有一些奇怪的方法,比如获取某个Calendar所处的时间是公元前还是公元后的方法。。。这些方法如果以后在实战中有运用到,再来更新这篇文章。

本篇文章中所使用到的部分代码已经上传至github,地址:https://github.com/sysukehan/AndroidTests.git,为Android Studio项目,其中的CalendarTest模块包含本文使用的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190313.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月23日 上午11:22
下一篇 2026年2月23日 下午12:01


相关推荐

  • 【Python数据科学】第三章 Pandas 数据处理(下半章)

    【Python数据科学】第三章 Pandas 数据处理(下半章)7 合并数据集 合并与连接 Pandas 的基本特性之一就是高性能的内存式数据连接 join 和合并 merge 操作 如果你有使用数据库的经验 那么对这类操作一定很熟悉 Pandas 的主接口是 pd merge 函数 下面让我们通过一些示例来介绍它的用法 7 1 关系代数 pd merge 实现的功能基于关系代数 relationalal 的一部分 关系代数是处理关系型数据的通用理论 绝大多数数据库的可用操作都以此为理论基础 关系代数方法论的强大之处在于 它提出的若干简单操作规则经过组合就可

    2026年3月20日
    4
  • python进制转换代码_python十六进制转换成十进制

    python进制转换代码_python十六进制转换成十进制本文实例讲述了Python实现的十进制小数与二进制小数相互转换功能。分享给大家供大家参考,具体如下:十进制小数⇒二进制小数乘2取整对十进制小数乘2得到的整数部分和小数部分,整数部分即是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止.第一次所得到为最高位,最后一次得到为最低位如:0.25的二进制0.25*2=…

    2025年11月30日
    6
  • pycharm打开ipynb显示为文本格式解决办法

    pycharm打开ipynb显示为文本格式解决办法然后进入添加类型 jupyternoteb 然后下方添加 ipynb

    2026年3月27日
    3
  • Java中的快捷键大全「建议收藏」

    Java中的快捷键大全「建议收藏」1.常用快捷键(1)Ctrl+Space说明:内容助理。提供对方法,变量,参数,javadoc等得提示,应运在多种场合,总之需要提示的时候可先按此快捷键。注:避免输入法的切换设置与此设置冲突(2)Ctrl+Shift+Space说明:变量提示(3)Ctrl+/说明:添加/消除//注释,在eclipse2.0中,消除注释为Ctrl+\(4)Ctrl+Shift+/

    2022年7月8日
    21
  • 怎么修改linux系统时区,Linux如何修改系统时间和时区

    怎么修改linux系统时区,Linux如何修改系统时间和时区Linux 如何修改系统时间和时区方法 修改时区 1 gt 找到相应的时区文件 usr share zoneinfo Asia Shanghai 用这个文件替换当前的 etc localtime 文件 或者找你认为是标准时间的服务器 然后 etc localtime etc localtime2 gt 修改 etc sysconfig clock 文

    2026年3月18日
    2
  • mysql要怎么做乐观锁_mysql乐观锁详解

    mysql要怎么做乐观锁_mysql乐观锁详解乐观锁 OptimisticLo 相对悲观锁而言 乐观锁机制采取了更加宽松的加锁机制 悲观锁大多数情况下依靠数据库的锁机制实现 以保证操作最大程度的独占性 但随之而来的就是数据库性能的大量开销 特别是对长事务而言 这样的开销往往无法承受 而乐观锁机制在一定程度上解决了这个问题 乐观锁 大多是基于数据版本 Version 记录机制实现 何谓数据版本 即为数据增加一个版本标识 在

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号