Android中Calendar类的用法总结
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中Calendar类的用法总结的更多相关文章
- android中Handle类的用法
android中Handle类的用法 当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无 ...
- [转]Android中Application类的用法
原文链接:http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.html Application类 Application ...
- android中PreferenceScreen类的用法
PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏幕可以 ...
- 三、android中Handle类的用法
当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉.Ha ...
- android中MediaPlayer类的用法
用法直接看sample package com.turtle920.androidaudioprocess; import android.media.MediaPlayer; import andr ...
- Android中Cursor类的概念和用法[转]
首页 > 程序开发 > 移动开发 > Android > 正文 Android中Cursor类的概念和用法 2011-09-07 0个评论 收藏 ...
- day319 1、正则表达式的定义及使用 2、Date类的用法 3、Calendar类的用法
1.正则表达式的定义及使用2.Date类的用法3.Calendar类的用法 一.正则表达式 ###01正则表达式的概念和作用* A: 正则表达式的概念和作用* a: 正则表达式的概述* 正则表达式也是 ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- C#中timer类的用法
C#中timer类的用法 关于C#中timer类 在C#里关于定时器类就有3个 1.定义在System.Windows.Forms里 2.定义在System.Threading.Timer类 ...
随机推荐
- 在Windows下安装Elasticsearch5.0
1.准备工作 安装和配置Java环境 2.下载 地址:https://www.elastic.co/downloads/elasticsearch 老版本:https://www.elastic.co ...
- HDU_1063_Exponentiation_大数
Exponentiation Time Limit: 2000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- PHP 之simple_html_dom实现网页数据采集
<?php set_time_limit(0); include './simple_html_dom.php'; $url = 'https://price.pcauto.com.cn/pri ...
- day2笔记
今日内容: 1.常用数据类型即数据方法 2.文件处理 3.函数 一 列表: 在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等 优先掌握的操作: 1.按索引取值 ...
- HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)
题目 模拟题也各种wa,我最近真的堕落了,,,,,智商越来越为负数了!!!!!!!! #include<stdio.h> #include<string.h> #include ...
- Scrapy实战:使用scrapy再再次爬取干货集中营的妹子图片
需要学习的知识: 1.获取到的json数据如何处理 2.保存到json文件 3.保存到MongoDB数据库 4.下载项目图片(含缩略图) 1.创建项目 scrapy startproject gank ...
- 《ABCD组》第八次作业:ALPHA冲刺
<ABCD组>第八次作业:ALPHA冲刺 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- 清北学堂模拟赛d6t3 反击数
分析:显然是一道数位dp题,不过需要一些奇怪的姿势.常规的数位dp能统计出一个区间内满足条件的数的个数,可是我们要求第k个,怎么办呢?转化为经典的二分问题,我们二分当前数的大小,看它是第几大的,就可以 ...
- ACM的你伤不起
劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! ...
- 1393 0和1相等串 51nod
1393 0和1相等串 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等. I ...