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

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

private Calendar c = Calendar.getInstance();

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

获得当前的年份

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

获得当前的月份

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

这个要特别注意一下,月份在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));

获得今天是本年的第几天

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

获得今天在本月的第几周

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

获得今天是周几,这里不能直接将返回值当做周几,而应该与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;

}

}

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

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

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

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小时制时间的方法

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

获得现在是几分

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

获得现在是几秒

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

获得现在是几毫秒

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

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

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

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

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

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

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

c.add(Calendar.DAY_OF_MONTH, 1);

加之前

加之后

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

比较两个日期是否相等

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));

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

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));

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

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

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

c.clear(Calendar.MONTH);

d.clear();

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

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

获得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()));

比较两个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));

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

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

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

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

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

android日历总结,Android中Calendar类的用法总结相关推荐

  1. Android中Calendar类的用法总结

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

  2. Java中Calendar类基本用法

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

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

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

  4. Android Studio使用过程中Java类突然报红,但项目可运行解决方案

    Android Studio使用过程中Java类突然报红,但项目可运行解决方案 参考文章: (1)Android Studio使用过程中Java类突然报红,但项目可运行解决方案 (2)https:// ...

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

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

  6. C#中timer类的用法

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

  7. android 日历图,Android中的自定义日历视图

    我正在为我的 Android应用程序构建一个自定义日历视图,允许您在几个月之间滑动.我已经创建了自定义日历方块视图,我已将其嵌入到自定义日历月视图中,并且所有内容都在1个月的范围内完美运行. 不幸的是 ...

  8. android中PreferenceScreen类的用法

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

  9. android++日历示例,Android控件之CalendarView 日历对话框(示例代码)

    在Android 3.0中新增的日历视图控件可以显示网格状的日历内容,android.widget.CalendarView是从android.widget.FrameLayout中继承. Calen ...

最新文章

  1. VB与EXCEL的相互勾通
  2. 计算机网络-思维导图(1)概述
  3. SAP CRM WebClient UI的搜索条件是怎么渲染出来的
  4. Linux系统安装Apache 2.4.6
  5. 计算机硬件技术基础5章在线,《计算机硬件技术基础》试题(D)
  6. 数据结构之红黑树(三)——删除操作
  7. 简单就是不复杂 转
  8. marked转换html失败,marked-JavaScript中文网-JavaScript教程资源分享门户
  9. 归并排序验证性实验_性能优化技巧:有序归并
  10. 如何用R语言做词云图,以某部网络小说为例
  11. dirent.h windows安装
  12. 自动阅读专业版第九次更新---原薅羊毛专业版(最后一次源代码分享)
  13. u盘中的android文件夹图标不显示,怎么解决u盘图标变成文件夹,教您解决方法
  14. 使用Arduino和TTP223电容式触摸传感器制作触摸检测器
  15. gnuplot绘图程序中对线型(linetype)、点型(pointtype)、线条宽度(linewidth)、点大小(pointsize)、图样
  16. 为什么录像都是用.avi而不是.mp4?
  17. 机器学习笔记(五)逻辑回归 、决策边界、OvR、OvO
  18. 虚拟屏幕与云计算————微软亚洲研究院
  19. js递归返回想要的值
  20. PCB应力应变测试分析结合IPC-9702和IPC-9704A标准

热门文章

  1. wireshark实验四:TCP
  2. Android 变量取名神器
  3. ubuntu20.04安装显卡问题记录
  4. 电脑版---QQ表情收藏测试用例
  5. Excel计算公式使用
  6. 【项目】小帽学堂(十三)
  7. puppeteer入门教程
  8. day06:如何定位分析前后端bug(详细版)
  9. TIA博途中通用函数库指令FIFO先入先出的具体使用方法
  10. Django 中间件(middleware)的工作原理和应用场景举例