java之Calender类精选

Posted 磊哥的Java历险记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之Calender类精选相关的知识,希望对你有一定的参考价值。

前言:

  你之所以会觉得难受,大概是因为你投入了大把时间和精力,到最后却没能得到你想要的东西,那种一瞬间被失落灌满的样子让你感到不值得。

我们上一篇聊到了java之Date和SimpleDateFormat处理时间类,这一篇我们聊一下Calender类,针对于以下的概念,都会有实体例子配合着,给大家演示,希望给历险中的你带来一些帮助!!! 

java之Calender类精选_概念

一.介绍

    我们可以使用Date来取得完整的日期时间显示,但如果您想要单独取得某个时间或日期资讯的话该如何?

    这个时候我们要使用Calendar日历类别,使用之前,您要先知道Calendar的一些方法取回的数字是对应于Calendar本身的常数,也就是说并不是您取回1 这个数字,就表示今天是星期一。

二.知识点介绍

   1、概念

    2、常见方法

    3、注意

    4、calendar类中常用方法

    5、精炼练习

三.知识点讲解

1、概念

    Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为字段值,方便获取。

    Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,将语言敏感内容处理好,再返回子类对象,如下:

    Calendar类静态方法:static Calendar getInstance():使用默认时区和语言环境获得一个日历。

Calendar c = Calendar.getInstance();  //返回当前日历对象

public static String cal()
Calendar b= new GregorianCalendar();
return b.toString();

2、常见方法

    (1)public static Calendar getInstance():获取日期对象

    (2)public int get(int field):获取时间字段值,字段参见帮助文档

       YEAR: 年

       MONTH :月,从0开始算起,最大11;0代表1月,11代表12月。

       DATE: 天

       HOUR:时

       MINUTE:分

       SECOND:秒 

    (3)public void add(int field,int amount):指定字段增加某值

    (4)public final void set(int year,intmonth,int date):设置年月日,可查看对应重载

    (5)public final Date getTime():获取该日历对象转成的日期对象

代码演示:

package com.Test;

import Test2.MyDate;

import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Main

private final static String name = "磊哥的java历险记-@51博客";

/*
*Calendar
*public static Calendar getInstance()
*Calendar rightNow = Calendar.getInstance()
*public int get(int field)
*public void add(int field,int amount)
*public final void set(int year,int month,int date)
*public final Date getTime()
*/
public static void main(String[] args)
//获取日期对象
Calendar rightNow = Calendar.getInstance();
System.out.println("日期对象:"+rightNow);
//获取时间字段值,字段参见帮助文档
int i = rightNow.get(Calendar.YEAR);
System.out.println("年:"+i);
System.out.println("月:"+rightNow.get(Calendar.MONTH+1));
System.out.println("天:"+rightNow.get(Calendar.DATE));
System.out.println("今天是这月的第几天:"+rightNow.get(Calendar.DAY_OF_MONTH));
//给指定年份 减1
rightNow.add(Calendar.YEAR,-1);
int year = rightNow.get(Calendar.YEAR);
System.out.println("年份减一:"+year);
//指定年份,月份,天
rightNow.set(2017,9, 10);
System.out.println("指定年:"+rightNow.get(Calendar.YEAR));
System.out.println("指定月:"+rightNow.get(Calendar.MONTH));
System.out.println("指定天:"+rightNow.get(Calendar.DATE));
//日历对象获取毫秒值
long time = rightNow.getTime().getTime();
long timeInMillis = rightNow.getTimeInMillis();
System.out.println("时间戳:"+time);
System.out.println("时间戳:"+timeInMillis);
System.out.println("============="+name+"=============");

java之Calender类精选_概念_02

3、注意

    (1)西方星期的开始为周日,中国为周一。

    (2)在Calendar类中,月份的表示是以0-11代表1-12。

    (3)日期是有大小关系的,时间靠后,时间越大。

4、Calendar类中的方法

由 Calendar 定义的一些常用方法如下表所示:

java之Calender类精选_Calender_03

代码演示:

时间类:
package Test2;

//导入时间包
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MyDate
private final static String name = "磊哥的java历险记-@51博客";

public MyDate()


// 当天
public String getThisToday()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); //时间的格式化
Calendar cal = Calendar.getInstance(); //类的实例化
//当天的开始时间,这里之所以三个分开设置,是因为Calendar已经存在日期
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
//第一个时间格式化
String start = sdf.format(cal.getTime());
//当天的结束时间
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
//第二个时间格式化
String end = sdf.format(cal.getTime());
return start + "|" + end;

// 本周
public String getThisWeekDate()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Calendar ca = Calendar.getInstance();
//设定每周第一天是星期一(也可以是星期日)
ca.setFirstDayOfWeek(Calendar.MONDAY);
//获取星期日的日期,具体时间为当前时间
ca.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
//设置周日结束时间(此处也可如上面那样设置时分秒即可)
ca.set(ca.get(Calendar.YEAR), ca.get(Calendar.MONTH),ca.get(Calendar.DATE), 23, 59, 59);
String end = sdf.format(ca.getTime());
//获取周一的日期
ca.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
ca.set(Calendar.HOUR_OF_DAY, 0);
ca.set(Calendar.MINUTE, 0);
ca.set(Calendar.SECOND, 0);
String start = sdf.format(ca.getTime());
return start + "|" + end;

// 本月日期段
public String getThisMonthDate()
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Calendar cc2 = Calendar.getInstance();
//获取当月DAY最大值
int maxMonthDay = cc2.getActualMaximum(Calendar.DAY_OF_MONTH);
cc2.set(cc2.get(Calendar.YEAR),cc2.get(Calendar.MONTH),maxMonthDay, 23, 59, 59);
/*
* add函数可以增加某一字段,并且会自动调节,例如当前为2016年12月31号,增加两个月会自动缩短天数为28,
* 天数增加超过当前最大值就会自动进一位到月份
*/
//cc2.add(Calendar.DAY_OF_MONTH, 2);
//roll函数可以设置当前field,超过时只会循环,不会进一位
//cc2.roll(Calendar.MONTH, 13);
/*
* getMaximum函数得到的每个月天数都是31,而getActualMaximum函数得到的则是每个月的实际天数
* 实际上就是前者返回给定日历的最大值,后者返回给定日历对应时间的最大值(最小值同理)
* 例如2017年2月20号,前者就会取2017年日历中月份的最大天数31,而后者则会取当月最大天数28。
* 因为每个月最小值都是1,所以这种情况下最小值都是相等。
*/
// for(int i=0;i<11;i++)
// cc2.add(Calendar.MONTH, 1);
// System.out.println(cc2.getMaximum(Calendar.DAY_OF_MONTH)+"------"+cc2.getActualMaximum(Calendar.DAY_OF_MONTH));
//
//System.out.println(cc2.getActualMinimum(Calendar.DAY_OF_WEEK)+"--------"+cc2.getMinimum(Calendar.DAY_OF_WEEK));

//也可以通过毫秒数设定时间
// cc2.setTimeInMillis(new Date().getTime());
// System.out.println(cc2.get(Calendar.MONTH));

String end = sdf.format(cc2.getTime());
cc2.set(cc2.get(Calendar.YEAR), cc2.get(Calendar.MONTH), 1, 0,0, 0);
String start = sdf.format(cc2.getTime());
return start + "|" + end;

java之Calender类精选_Calender_04

主方法调用:
package com.Test;

import Test2.MyDate;

import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Main

private final static String name = "磊哥的java历险记-@51博客";

public static void main(String[] args)
MyDate myDate = new MyDate();
String monthDate = myDate.getThisMonthDate();
String today = myDate.getThisToday();
String weekDate = myDate.getThisWeekDate();
System.out.println("monthDate:"+monthDate);
System.out.println("today:"+today);
System.out.println("weekDate:"+weekDate);
System.out.println("============="+name+"=============");

java之Calender类精选_概念_05

5、精炼练习:

5.1 题目

(1)获取到2018-06的最后一天。

(2)比较2018-06-26和2017-08-26谁大

5.2 实验步骤

(1)使用getActualMaximum()获取最后一天或者shiy哦那个roll()获取

(2)使用compareTo进行时间比较。

代码演示:
package com.Test;

import Test2.MyDate;

import java.awt.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Main

private final static String name = "磊哥的java历险记-@51博客";

public static void main(String[] args) throws ParseException
//方法1利用getActualMaximum
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
//calendar设置时间
calendar.setTime(sdf.parse("2018-06-26"));
//这里的getMaximum不会被calendar.setTime所影响,因为它只识别当月的。而getActualMaximum则会是canlender的设置的。
System.out.println(calendar.getMaximum(Calendar.DAY_OF_MONTH));
System.out.println(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
//方法2利用roll
calendar.roll(Calendar.DAY_OF_MONTH,-1);
System.out.println(sdf.format(calendar.getTime()));

//比较大小
//claendarNew设置时间
Calendar calendarNew = Calendar.getInstance();
calendarNew.setTime(sdf.parse("2018-08-27"));
//calender的时间比较用compareTo 大于0表示前者大于后者 小于0表示前者小于后者 等于0表示两者相等
int result = calendarNew.compareTo(calendar);
if(result > 0 )
System.out.println("2018-06-26<2018-08-26");
else if(result < 0)
System.out.println("2018-06-26>2018-08-26");
else
System.out.println("2018-06-26=2018-08-26");

System.out.println("============="+name+"=============");

java之Calender类精选_概念_06

结语:

  没有太晚的开始,不如就从今天行动。总有一天,那个一点一点可见的未来,会在你心里,也在你的脚下慢慢清透。生活,从不亏待每一个努力向上的人。

我会沿着java基础至中阶,高阶,和后面的实战项目,循序渐进,由浅入深,希望能够帮助看到我文章的兄弟们,特别是初学者!

感谢大家持续关注!

java之Calender类精选_概念_07


以上是关于java之Calender类精选的主要内容,如果未能解决你的问题,请参考以下文章

java之String类精选

java之Math类精选

java之基本类型包装类精选

java之StringBuilder和stringbuffer精选

java之正则表达式精选

java之基础算法精选