API
//获得Calendar这个类的实例:
Calendar c = Calendar.getInstance();
String TAG = "我来看看";
Calendar c = Calendar.getInstance();
//获得当前的年份
int year = c.get(Calendar.YEAR);
Log.e(TAG, "年份:"+year);
//获得当前的月份 //注意: 1 月份的值为0,需加1为现实中月份
int month = c.get((Calendar.MONTH)) + 1;
Log.e(TAG, "月份:"+month);
//获得今天是本月的第几天,两种写法
int date = c.get(Calendar.DATE);
int day = c.get(Calendar.DAY_OF_MONTH);
Log.e(TAG, "date:"+date);
Log.e(TAG, "day:"+day);
//获得今天是本年的第几天
int num = c.get(Calendar.DAY_OF_YEAR);
Log.e(TAG, "获得今天是本年的第几天: "+num );
//获得今天在本月的第几周
int i1 = c.get(Calendar.DAY_OF_WEEK_IN_MONTH);
Log.e(TAG, "获得今天在本月的第几周: "+i1 );
//获得今天是周几
int i2 = c.get(Calendar.DAY_OF_WEEK)-1;
Log.e(TAG, "获得今天是周几: "+i2 );
//获得几点,12小时制
int i3 = c.get(Calendar.HOUR);
Log.e(TAG, "获得几点,12小时制: "+i3 );
//需要区分是上午还是下午
int i = c.get(Calendar.AM_PM);
Log.e(TAG, "需要区分是上午还是下午: "+i );
//上午
int am = Calendar.AM;
Log.e(TAG, "上午: "+am);
//下午
int pm = Calendar.PM;
Log.e(TAG, "下午: "+pm);
//获取24小时制时间的方法
int i4 = c.get(Calendar.HOUR_OF_DAY);
Log.e(TAG, "获取24小时制时间的方法: "+i4 );
//获得现在是几分
int i5 = c.get(Calendar.MINUTE);
Log.e(TAG, "获得现在是几分: "+i5);
//一下add方法的设定会影响最终的输出结果 如果不重置将会一直存续下去 用这个方法我们可以切换 地域 或者是定时
// 10分钟以后
c.add(Calendar.MINUTE, 10);
int i15 = c.get(Calendar.MINUTE);
Log.e(TAG, "10分钟以后: "+i15);
// 30分钟前
c.add(Calendar.MINUTE, -30);
Log.e(TAG, "30分钟前: "+i15);
// 设定1小时以后,前者大,显示 1
c.add(Calendar.HOUR, +1);
// 退回 2 小时,时间相同,显示 0
c.add(Calendar.HOUR, -2);
//增加日期中的某个域的值,比如想获得明天的日期,就需要向DAY域加1
c.add(Calendar.DAY_OF_MONTH, +1);
// 重置 Calendar 显示当前时间
c.setTime(new Date());
//获得现在是几秒
int i6 = c.get(Calendar.SECOND);
Log.e(TAG, "获得现在是几秒: "+i6);
//获得现在是几毫秒
int i7 = c.get(Calendar.MILLISECOND);
Log.e(TAG, "获得现在是几毫秒: "+i7 );
//SimpleDateFormat来输出规范的字符串
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd");
String format = sdf.format(c.getTime());
Log.e(TAG, "格式化输出: "+format );
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = sdf2.format(c.getTime());
Log.e(TAG, "格式化输出: "+format1 );
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
String format2 = sdf3.format(c.getTime());
Log.e(TAG, "格式化输出: "+format2);
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date());
Log.e(TAG, "完整显示今天时间: "+str );
// 重置 Calendar 显示当前时间
c.setTime(new Date());
str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(c.getTime());
//比较时间
Calendar c2 = Calendar.getInstance();
Calendar d2 = Calendar.getInstance();
d2.add(Calendar.DAY_OF_MONTH, 1);
//比较两个日期哪个更靠后
boolean after = d2.after(c2);
//比较两个日期哪个更靠前
boolean before = c2.before(d2);
Log.e(TAG, "比较两个日期哪个更靠后: "+after );
Log.e(TAG, "比较两个日期哪个更靠前: "+before );
//要求两个参与比较的字符串的形式及长度必须相同才能够正确比较,否则,比较结果是错的.
String a="2019-10-12";
String b="2019-10-21";
int result=a.compareTo(b);
int result2=b.compareTo(a);
//1 比目标大 -1比 目标小 0相等
Log.e(TAG, "String中方法compareTo: "+result +"and"+result2);
SimpleDateFormat sdf4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date parse = sdf4.parse("2019-05-31 12:36:44");
Date parse1 = sdf4.parse("2019-05-31 12:36:55");
Log.e(TAG, "data比大小: "+(parse.getTime() > parse1.getTime() ));
} catch (ParseException e) {
e.printStackTrace();
}
String f = sdf2.format("2019-05-31 12:36:44");
//比较两个日期是否相等
Calendar c1 = Calendar.getInstance();
Calendar d1 = Calendar.getInstance();
c1.equals(d1); //true
c1.add(Calendar.YEAR, 1);
c1.equals(d1); //false
//清空某一个域并用这个域最小的值代替
c.clear(Calendar.MONTH);
//清空所有的域然后全部用最小的值代替
//1970.1.1 00.00
c.clear();
//获得Calendar对象的一个深拷贝,独立于拷贝对象
c = (Calendar) c.clone();
sdf.format(c.getTime());
//比较两个Calendar哪个在前哪个在后的方法
//c实例要靠前一些,返回-1,如果要靠后一些,返回1,如果相等,返回0
c = (Calendar) c.clone();
c.compareTo(c);
时间.png
拓展:一个简单的运用 防止连点
这个工具类
public abstract class NoDoubleClickListener implements View.OnClickListener {
private final long lastClickTime=0; //最后一次点击事件的时间
public final int MIN_CLICK_DELAY_TIME=1500; //单位毫秒
public abstract void onNoDoubleClick(View view); //创建一个抽象方法 用来再次回调事件
@Override
public void onClick(View v) {
Calendar c = Calendar.getInstance();//实例化
long currentTime= c.getTimeInMillis();
/*
c.getTimeInMillis();
返回了一个long 类型的值
格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000到Calendar对象表示的时间之间的毫秒数
除以 1000/60/60/24/365 获取年数 ~
*/
if (currentTime - lastClickTime >= MIN_CLICK_DELAY_TIME) {
lastClickTime=currentTime;
onNoDoubleClick(v);
}
}
}
当快速点击时 时间戳 小于1500 所以不会触发if条件具体的效果如图
网友评论