首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android中Calendar类的用法总结[通俗易懂]

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

作者头像
全栈程序员站长
发布于 2022-11-09 07:16:48
发布于 2022-11-09 07:16:48
2.7K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Calendar c = Calendar.getInstance();

然后就可以用这个变量来获取时间了。 获得当前的年份

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "当前的年份为:" + c.get(Calendar.YEAR));

获得当前的月份

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "当前的月份为:" + (c.get(Calendar.MONTH) + 1));

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "DATE:" + c.get(Calendar.DATE));
Log.i("MainActivityFilter", "DAY_OF_MONTH:" + c.get(Calendar.DAY_OF_MONTH));

获得今天是本年的第几天

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "今天是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");

获得今天在本月的第几周

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "今天在本月的第" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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;
        }
    }

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR) + "点");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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相等就是下午

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR_OF_DAY) + "点");

获得现在是几分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MINUTE) + "分");

获得现在是几秒

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "现在是" + c.get(Calendar.SECOND) + "秒");

获得现在是几毫秒

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MILLISECOND) + "毫秒");

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
Log.i("MainActivityFilter", sdf.format(c.getTime()));

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c.add(Calendar.DAY_OF_MONTH, 1);

加之前

加之后

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

比较两个日期是否相等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Calendar c = Calendar.getInstance();
private Calendar d = Calendar.getInstance();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
c.add(Calendar.YEAR, 1);
Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private Calendar c = Calendar.getInstance();
private Calendar d = Calendar.getInstance();
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
d.add(Calendar.DAY_OF_MONTH, 1);
Log.i("MainActivityFilter", "d在c后面:" + d.after(c));

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Log.i("MainActivityFilter", "c在d前面:" + c.before(d));

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
c.clear(Calendar.MONTH);
d.clear();

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

获得Calendar对象的一个深拷贝

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()));

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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));

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月23日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第三阶段-Java常见对象:【第十一章 Date、DateFormat和Calendar类】
可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。
BWH_Steven
2019/08/09
4520
Calendar类_java calendar
Calendar是java util包下的一个工具类,提供了很方便的不同日期格式的处理。啥也不说了,直接撸代码:
全栈程序员站长
2022/11/09
1.1K0
Java Calendar 类的时间操作 原
Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。
wuweixiang
2018/08/14
6080
Java Date 和 Calendar 实例
当前日期:  2012-03-07 2012-03-07 12:30:11 2012-3-7 12:30:11.101 计算周:  -3 3/5/12 12:30 PM 3/10/12 12:30 PM 3/12/12 12:30 PM 3/3/12 12:30 PM 计算月:  2012-03-01 2012-03-31 2012-02-01 2012-02-29 2012-04-01 2012-04-30 计算年:  2012-01-01 2012-12-31 2011-01-01 2011-12-31 2013-01-01 2013-12-31 366 in 2012 计算季度:  2012-3-7 in [ 2012-1 : 2012-3 ] 31 in [ 2012-3-7 ] true 日期格式转换与计算:  Wed Jun 20 00:00:00 CST 2012 Wednesday 2012-06-02 -> 2012-06-12间隔天数:10
阳光岛主
2019/02/19
3.2K0
14(02)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
5:BigInteger(理解) (1)针对大整数的运算 (2)构造方法 A:BigInteger(String s) package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进行运算 * * 构造方法: * BigInteger(String val) */ public class BigIntegerDemo { public static void main(St
Java帮帮
2018/03/16
1K0
DateUtils(一个日期工具类)
用途:一些与时间相关的处理 功能: 1.获取当前时间 格式---->2019-08-04 13:30:29:getNowTime 2.将一个日期字符串转换成Data对象 string–>date:stringToDate 3将date转换成字符串 date—>string:dateToString 4.获取指定日期 ,返回值为: “周日”, “周一”, “周二”, “周三”, “周四”, “周五”, “周六”:getWeekOfDate 5.获取指定日期对应周几的序列:getIndexWeekOfDate 6.获取当前月份:getNowMonth 7.获取当前月号:getNowDay 8.获取当前年份:getNowYear 9.获取本月份的天数:getNowDaysOfMonth 10.获取指定月份的天数:daysOfMonth 11.计算两个日期之间的年份差距:getYearGapOfDates 12:计算两个日期之间的月份差距:getMonthGapOfDates 13.计算两个日期之间的天数差:getDaysGapOfDates
计蒙不吃鱼
2025/06/12
1800
DateUtil-常用关于date的工具类备份
最近做统计,用到不少时间相关的操作,整理成了一个小工具类,备份于此并不定期更新。 DateUtil public class DateUtil { /** * 根据开始与结束日期获取相减得到的天数 * @param beginDateStr * @param endDateStr * @return */ public static long getDaySub(String beginDateStr,String endDateStr){
WindCoder
2018/09/20
8690
DateUtil-常用关于date的工具类备份
Java Calendar获取年、月、日、时间[通俗易懂]
Calendar c = Calendar.getInstance(TimeZone.getTimeZone(“GMT+08:00”));//获取东八区时间
全栈程序员站长
2022/08/15
5.3K0
java日期工具类
这里我总结了java中日期的处理方法 /** * 按照yyyy-MM-dd HH:mm:ss格式化日期 * 可根据需要定制 * @param date * @return */ public static String format(Date date) { sdf.applyPattern("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } /** * 给根据日期添加天数 * * @param da
用户5166556
2019/04/16
1.4K0
Java 相关时间工具类
package com.cavytech.wear2.util; import android.text.TextUtils; import android.text.format.Time; import android.util.Log; import com.cavytech.wear2.entity.BandSleepStepBean; import com.cavytech.wear2.entity.GetSleepBean; import java.text.DateFormat;
先知先觉
2019/01/21
1.5K0
java calendar和date_java calendar获取年月日
java中的Calendar类为什么起个名字就叫做日历呢?因为这个类可以让我们像看日历一样得到这个时间的所有属性,你还在为不知道2014年5月7日是周几而苦恼吗?你还在为2005年8月14日是8月的第几周而发愁吗?快来试一试Calendar吧。
全栈程序员站长
2022/11/09
1.5K0
java 转为Calendar_java Calendar和Date()的转化
public static void main(String args[]){
全栈程序员站长
2022/06/26
1K0
date和calendar_Calendar类
在程序中,某个固定的时间代表的都是一个时间点,也就是一个时间的瞬间,例如2009年3月8日15点50分0秒,在实际的应用中,经常需要对于两个时间进行比较或计算时间之间的差值,这些功能在Java语言中都可以很方便的实现。
全栈程序员站长
2022/11/09
2.2K0
Object类、常用API
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100195.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/29
2.1K0
Object类、常用API
java 星期几、得周一、得周日、上周、下周、相差、日期工具类
import org.apache.commons.lang3.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 日期工具类 * * @author silence * @version 2017/12/24 */ public class DateUtil {
微风-- 轻许--
2022/04/13
1.3K0
java最全最常用的日期工具类(随时补充)
@Slf4j public final class DateUtils { private DateUtils() { } private static final String FORMAT_YYYYMMDDHHMMSS = "yyyy-MM-dd HH:mm:ss"; public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd"; public static final String FORMAT_
疯狂的KK
2023/04/10
1.4K0
java countdowntimer_Android 倒计时CountDownTimer[通俗易懂]
可能在没有遇到CountDownTimer之前,我们都是创建Handle来开启异步线程来处理,如果你现在使用,我只能说太菜了,官方已经为我们封装好了一个类,爽的很,一起来看
全栈程序员站长
2022/10/02
8600
Java获取上一周、上一个月、上一年的时间
SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); Calendar c = Calendar.getInstance(); 1.过去七天 c.setTime(new Date()); c.add(Calendar.DATE, - 7); Date d = c.getTime(); String day = format.format(d); System.out.println(“过去七天:”+day); 2
栗筝i
2022/12/01
2K0
java对时间的操作,提供给你工具类,直接调用方法就可以操作时间了
-创建 SimpleDateFormat 对象时必须指定转换格式。 -转换格式区分大小写,yyyy 代表年份,MM 代表月份,dd 代表日期,HH 代表 24 进制的小时,hh 代表 12 进制的小时,mm 代表分钟,ss 代表秒。
一写代码就开心
2020/11/20
3.2K0
java对时间的操作,提供给你工具类,直接调用方法就可以操作时间了
Java时间工具类
import java.sql.Timestamp; import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class TimestampTool { /** 将毫秒转成时间 *
用户7108768
2021/09/23
1.9K0
相关推荐
第三阶段-Java常见对象:【第十一章 Date、DateFormat和Calendar类】
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验