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

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

[java] view plaincopy
  1. private Calendar c = Calendar.getInstance();

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

[java] view plaincopy
  1. Log.i("MainActivityFilter", "当前的年份为:" + c.get(Calendar.YEAR));

获得当前的月份

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

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

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

[java] view plaincopy
  1. Log.i("MainActivityFilter", "DATE:" + c.get(Calendar.DATE));
  2. Log.i("MainActivityFilter", "DAY_OF_MONTH:" + c.get(Calendar.DAY_OF_MONTH));

获得今天是本年的第几天

[java] view plaincopy
  1. Log.i("MainActivityFilter", "今天是今年的第" + c.get(Calendar.DAY_OF_YEAR) + "天");

获得今天在本月的第几周

[java] view plaincopy
  1. Log.i("MainActivityFilter", "今天在本月的第" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH) + "周");

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

[java] view plaincopy
  1. private void printDayOfWeek() {
  2. switch (c.get(Calendar.DAY_OF_WEEK)) {
  3. case Calendar.SUNDAY:
  4. Log.i("MainActivityFilter", "今天是周日");
  5. break;
  6. case Calendar.MONDAY:
  7. Log.i("MainActivityFilter", "今天是周一");
  8. break;
  9. case Calendar.TUESDAY:
  10. Log.i("MainActivityFilter", "今天是周二");
  11. break;
  12. case Calendar.WEDNESDAY:
  13. Log.i("MainActivityFilter", "今天是周三");
  14. break;
  15. case Calendar.THURSDAY:
  16. Log.i("MainActivityFilter", "今天是周四");
  17. break;
  18. case Calendar.FRIDAY:
  19. Log.i("MainActivityFilter", "今天是周五");
  20. break;
  21. case Calendar.SATURDAY:
  22. Log.i("MainActivityFilter", "今天是周六");
  23. break;
  24. default:
  25. break;
  26. }
  27. }

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

[java] view plaincopy
  1. Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR) + "点");

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

[java] view plaincopy
  1. if (c.get(Calendar.AM_PM) == Calendar.AM) {
  2. Log.i("MainActivityFilter", "现在是上午");
  3. } else {
  4. Log.i("MainActivityFilter", "现在是下午");
  5. }

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

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

[java] view plaincopy
  1. Log.i("MainActivityFilter", "现在是" + c.get(Calendar.HOUR_OF_DAY) + "点");

获得现在是几分

[java] view plaincopy
  1. Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MINUTE) + "分");

获得现在是几秒

[java] view plaincopy
  1. Log.i("MainActivityFilter", "现在是" + c.get(Calendar.SECOND) + "秒");

获得现在是几毫秒

[java] view plaincopy
  1. Log.i("MainActivityFilter", "现在是" + c.get(Calendar.MILLISECOND) + "毫秒");

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

[java] view plaincopy
  1. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
  2. Log.i("MainActivityFilter", sdf.format(c.getTime()));

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

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

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

[java] view plaincopy
  1. c.add(Calendar.DAY_OF_MONTH, 1);

加之前

加之后

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

比较两个日期是否相等

[java] view plaincopy
  1. private Calendar c = Calendar.getInstance();
  2. private Calendar d = Calendar.getInstance();
[java] view plaincopy
  1. Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));
  2. c.add(Calendar.YEAR, 1);
  3. Log.i("MainActivityFilter", "c和d是否相等:" + c.equals(d));

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

[java] view plaincopy
  1. private Calendar c = Calendar.getInstance();
  2. private Calendar d = Calendar.getInstance();
  3. private SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
[java] view plaincopy
  1. d.add(Calendar.DAY_OF_MONTH, 1);
  2. Log.i("MainActivityFilter", "d在c后面:" + d.after(c));

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

[java] view plaincopy
  1. Log.i("MainActivityFilter", "c在d前面:" + c.before(d));

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

[java] view plaincopy
  1. c.clear(Calendar.MONTH);
  2. d.clear();
  3. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  4. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

获得Calendar对象的一个深拷贝

[java] view plaincopy
  1. d = (Calendar) c.clone();
  2. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  3. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));
  4. c.add(Calendar.YEAR, 1);
  5. Log.i("MainActivityFilter", "c:" + sdf.format(c.getTime()));
  6. Log.i("MainActivityFilter", "d:" + sdf.format(d.getTime()));

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

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

[java] view plaincopy
  1. d = (Calendar) c.clone();
  2. Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));
  3. c.add(Calendar.YEAR, 1);
  4. Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));
  5. d.add(Calendar.YEAR, 2);
  6. Log.i("MainActivityFilter", "比较的结果:" + c.compareTo(d));

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

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

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

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

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

转载于:https://www.cnblogs.com/Free-Thinker/p/7477576.html

Android中Calendar类的用法总结相关推荐

  1. android日历总结,Android中Calendar类的用法总结

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

  2. android服务绑定异步,Android中异步类AsyncTask用法总结

    本文总结分析了Android中异步类AsyncTask用法.分享给大家供大家参考,具体如下: 最近整理笔记的时候,看到有关AsyncTask不是很理解,重新疏导了一下,有在网上找了一些资料,个人不敢独 ...

  3. android中PreferenceScreen类的用法

    PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 "偏好显示",明白这个意思就好,就是说根据特点灵活的定义显示内 ...

  4. Java中Calendar类基本用法

    Calendar import java.util.Calendar;public class _Calendar {public static void main(String[] args) {/ ...

  5. java中用法实例_java中Calendar类用法实例详解

    本文实例讲述了java中Calendar类用法.分享给大家供大家参考,具体如下: java中的Calendar在开发中经常被忽略,这篇博客总结一下这个类,对后面项目中使用时期的时候有帮助. Calen ...

  6. android 一年日历,android中Calendar与Date的区别 转自网络

    Android中Calendar与Date的区别以及消除时区对日期操作影响的方法 在Android中的日期操作常用的有三种方式,分别是: Date类型 Calendar类型 Unix时间戳 其中,Un ...

  7. Android中各种Span的用法——转载

    转载一篇觉得很好的文章,在转载中成长:https://blog.csdn.net/qq_16430735/article/details/50427978 Android中各种Span的用法 前言 S ...

  8. 49.Android中各种Span的用法

    49.Android中各种Span的用法 Android中各种Span的用法 前言 SpannableStringBuilder URLSpan UnderlineSpan TypefaceSpan ...

  9. C#中timer类的用法

    C#中timer类的用法 关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类 ...

最新文章

  1. Java中的多线程总结
  2. 基于二代和三代测序技术的柚子基因组混合拼装
  3. echo mysql_mysql select
  4. 怎么安装Scrapy框架以及安装时出现的一系列错误(win7 64位 python3 pycharm)
  5. LETTERS (信息学奥赛一本通-T1212)
  6. bat脚本 git pull_Git遇到错误时如何解决的一些坑
  7. python机器学习库sklearn——多类、多标签、多输出
  8. 2017.11.21 课程随记
  9. ExamDiff Pro(电脑文件对比工具)官方正式版V12.0.1.8 | 最好用的文件对比工具之一文件内容对比工具下载
  10. 科创人·优艾智合创始人张朝辉:死磕细分行业Know-How,中国制造将引领全球移动机器人市场
  11. 【NOIP提高组五校联考】挖金矿
  12. 面试被问到【未来3-5年的职业规划】,到底该怎么回答?
  13. Excel 怎么验证身份证号码是否重复
  14. 2019 美团校招笔试题 外卖满减
  15. LaTeX 算法代码排版 --latex2e范例总结
  16. 战神引擎传奇开服教程开服版本 开服服务器推荐战神引擎开服
  17. 记一次CTF过程(Writeup)
  18. 还在问视频音频转文字软件哪个好吗?快码住这两款
  19. 学习编程前需要知道什么?
  20. linux练习平台WarGame之bandit通关日志

热门文章

  1. 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:...
  2. 盛大创新院赞助首届.NET技术交流会即将召开
  3. sqlserver中判断表或临时表是否存在
  4. leetcode算法题--Unique Paths II
  5. python怎么随机生成数据_Python-随机生成数据
  6. BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
  7. Linux 基础知识(十)DNS服务器主从复制,子域授权
  8. 商业级全局负载均衡器 zeus.ZXTM 实施方案
  9. 对于java的命名规范(标识符)
  10. Google 已正式结束对 Eclipse Android 的支持