目录
set(int year,int month,int date,int hourofday,int minute,int second):设置日历的年、月、日、时、分、秒;
int get(int field):返回给定日历字段的值;
setTime(Date date):使用给定的 Date 设置此日历的时间;
Date getTime():返回一个 Date 表示此日历的时间;
add(int field,int amount):按照日历的规则,给指定字段添加或减少时间量。
任务描述
本关任务:获取给定年月的最后一天。
相关知识
我们通过之前的学习已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢?
calendar 类是一个抽象类,是 Java 日期处理的核心类之一。Calendar 类为操作日历字段,及其与特定瞬间之间的转换提供了方法。日历字段包含 YEAR、MONTH、DAY_OF_MONTH、HOUR 等,它们都是 Calendar 类的静态常量。
首先我们来看该类的声明:
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
由于该类的修饰符是 protected,所以无法直接创建该对象。需要通过别的途径生成该对象。不过 Calendar 类提供了一个类方法 getInstance() 来返回 Calendar 的实例(该对象为 Calendar 的子类对象),其日历字段已由当前日期和时间初始化。代码所示如下:
Calendar calendar = Calendar.getInstance(); // 使用默认时区和语言环境获得一个日历
Calendar 的一些常用字段
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 日期 |
Calendar.DAY_OF_MONTH | 日期,和上面的字段意义完全相同 |
Calendar.HOUR | 12 小时制的小时 |
Calendar.HOUR_OF_DAY | 24 小时制的小时 |
Calendar.MINUTE | 分钟 |
Calendar.SECOND | 秒 |
Calendar.DAY_OF_WEEK | 星期几 |
Calendar.AM | 上午 |
Calendar.PM | 下午 |
Calendar 类的一些常用方法。
方法 | 描述 |
static Calendar getInstance() | 使用默认时区和区域设置获取日历,通过该方法生成 Calendar 对象。 |
public void set(int year,int month,int date,int hourofday,int minute,int second) | 设置日历的年、月、日、时、分、秒。 |
public int get(int field) | 返回给定日历字段的值。所谓字段就是年、月、日等等。 |
public void setTime(Date date) | 使用给定的 Date 设置此日历的时间。 |
public Date getTime() | 返回一个 Date 表示此日历的时间。 |
abstract void add(int field,int amount) | 按照日历的规则,给指定字段添加或减少时间量。 |
public long getTimeInMillis() | 以毫秒为单位返回该日历的时间值。 |
getActualMaximum() | 方法返回基于此 Calendar 的时间值,指定日历字段可能拥有的最大值。 |
例子:
-
set(int year,int month,int date,int hourofday,int minute,int second):设置日历的年、月、日、时、分、秒;
Calendar calendar = Calendar.getInstance();
calendar.set(2020,1,1); // 设置当前时间为 2020年02月01日
注意:月份的下标是从 0 开始的,即 011 分别代表 112 月。
-
int get(int field):返回给定日历字段的值;
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
System.out.println(year);
执行结果:
2020
-
setTime(Date date):使用给定的 Date 设置此日历的时间;
Calendar calendar = Calendar.getInstance();
Date d = new Date(1580538917000L);
calendar.setTime(d); // 使用给定的 Date 设置此日历的时间
-
Date getTime():返回一个 Date 表示此日历的时间;
Calendar calendar = Calendar.getInstance();
Date d = new Date(1580538917000L);
calendar.setTime(d); // 使用给定的 Date 设置此日历的时间
System.out.println(calendar.getTime());
执行结果:
Sat Feb 01 14:35:17 CST 2020
-
add(int field,int amount):按照日历的规则,给指定字段添加或减少时间量。
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
// 把 calendar 对象的日期加上 10 ,也就是 calendar 也就表示为 10 天后的日期,其它所有的数值会被重新计算
calendar.add(Calendar.DATE, 10);
System.out.println(calendar.getTime());
// 把 calendar 对象的日期减去 10 ,也就是 calendar 也就表示为 10 天前的日期,其它所有的数值会被重新计算
calendar.add(Calendar.DATE, -10);
System.out.println(calendar.getTime());
执行结果:
Tue Feb 18 17:45:47 CST 2020
Fri Feb 28 17:45:47 CST 2020
Tue Feb 18 17:45:47 CST 2020
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中获取给定年月的最后一天,具体要求如下:
- getLastDayOfMonth(int year,int month):该方法提供了两个参数,分别为当前的年月,计算当前年月下该月的最后一天,将最后一天的日期输出,返回类型为 String,格式为:“yyyy-MM-dd”。
注意:月份下标是从 0 开始的。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
测试输入:
2015
1
预期输出:
当前月的最后一天:2015-01-31
开始你的任务吧,祝你成功!
代码展示
/**
* 获取给定年月的最后一天。
*/
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Test{
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
/**
* 该方法提供了两个参数,分别为当前的年月,
* 计算当前年月下该月的最后一天,将最后一天的日期输出,
* 返回类型为 String,格式为:“yyyy-MM-dd”
*/
public static String getLastDayOfMonth(int year,int month) {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
/********** End **********/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
int month = scanner.nextInt();
String lastDay = getLastDayOfMonth(year,month);
System.out.print("当前月的最后一天:" + lastDay);
}
}