Calendar类的常用方法
1.1Calendar类
-
Calendar类概述
Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
该方法返回一个Calendar 对象。
其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance(); -
Calendar类常用方法
方法名 | 说明 |
---|---|
public int get(int field) | 返回给定日历字段的值 |
public abstract void add(int field, int amount) | 根据日历的规则,将指定的时间量添加或减去给定的日 历字 |
public final void set(int year,int month,int date) | 设置当前日历的年月日 |
- 示例代码
public class CalendarDemo {
public static void main(String[] args) {
//获取日历类对象
Calendar c = Calendar.getInstance();
//public int get(int field):返回给定日历字段的值
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");//2020年11月3日
//public abstract void add(int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段
//需求1:3年前的今天
c.add(Calendar.YEAR,-3);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");//2017年11月3日
//需求2:10年后的10天前
c.add(Calendar.YEAR,10);
c.add(Calendar.DATE,-10);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");//2027年10月24日
//public final void set(int year,int month,int date):设置当前日历的年月日
c.set(2050,10,10);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH) + 1;
date = c.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + date + "日");//2050年11月10日
}
}
1.2获取时间
public void getTime(){
// 使用默认时区和语言环境获得一个日历
//默认时区是Asia/Shanghai
Calendar cal = Calendar.getInstance();
TimeZone timeZone = TimeZone.getTimeZone("GMT+8:00");
cal.setTimeZone(timeZone);
// 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));
//从星期天开始算起
System.out.println("一个星期中的某天:" + cal.get(Calendar.DAY_OF_WEEK));
System.out.println("月中的第几个星期:" + cal.get(Calendar.DAY_OF_WEEK_IN_MONTH));
}
运行结果
年:2021
月:7
日:21
时:11
分:32
秒:59
一个星期中的某天:4
月中的第几个星期:3
1.3设置时间
月份的下标从 0 开始,设置时同样需要注意,比如我们设置为 2 月 15 日除夕当晚的倒计时的最后一秒: 2018-02-15 23:59:59
可以这样:
Calendar cal = Calendar.getInstance();
// 如果想设置为某个日期,可以一次设置年月日时分秒,由于月份下标从0开始赋值月份要-1
// cal.set(year, month, date, hourOfDay, minute, second);
cal.set(2018, 1, 15, 23, 59, 59);
或者也可以单个字段一一设置:
// 或者6个字段分别进行设置,由于月份下标从0开始赋值月份要-1
cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.FEBRUARY);
cal.set(Calendar.DAY_OF_MONTH, 15);
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
System.out.println(cal.getTime());
打印的时间结果为:
Thu Feb 15 23:59:59 CST 2018
1.4时间计算
add方法:
比如在除夕当晚最后一秒,add 一秒:
Calendar cal = Calendar.getInstance();
cal.set(2018, 1, 15, 23, 59, 59);
System.out.println(cal.getTime());
cal.add(Calendar.SECOND, 1);
System.out.println(cal.getTime());
打印时间结果如下,日期会自动进入下一天:
Thu Feb 15 23:59:59 CST 2018
Fri Feb 16 00:00:00 CST 2018
再比如 1 月 31 号的时候,月份加一,会出现怎样结果:
Calendar cal = Calendar.getInstance();
cal.set(2018, 0, 31, 8, 0, 0);
System.out.println(cal.getTime());
cal.add(Calendar.MONTH, 1);
System.out.println(cal.getTime());
运算结果
Wed Jan 31 08:00:00 CST 2018
Wed Feb 28 08:00:00 CST 2018
时间日期类(JDK8)
在JDK7以前使用Date类表示日期时间对象,但是想要对时间进行计算需要转换成毫秒值手动计算比较麻烦。
JDK8以后新增了几个和时间相关的类,提供了一些对时间计算的方法,用起来非常方便。
LocalDateTime: 年月日时分秒
LocalDate: 年月日
LocalTime: 时分秒
以上三个类都可以用来表示时间,他们的方法都是类似的,我们这里以LocalDateTime为例做演示。
2.1LocalDateTime获取对象
public static LocalDateTime now()
获取当前时间的对象
public static LocalDateTime of(int y,int m,int d,int h,int m,int s)
获取指定时间的对象
2.2LocalDateTime获取方法
public int getYear()
获取年
public int getMonthValue()
获取年中的月
public int getDayOfMonth()
获取月中的天
publc int getDayOfYear()
获取年中的天
public DayOfWeek getDayOfWeek()
获取星期几
public int getHour()
获取小时
public int getMinute()
获取分钟
public int getSecond()
获取秒
2.3LocalDateTime转换方法
public LocalDate toLocalDate()
把LocalDateTime转换为LocalDate
public LocalTime toLocalTime()
把LocalDateTime转换为LocalTime
2.4LocalDateTime格式化和解析
public String format(DateTimeFormatter formatter)
把LocalDateTime表示的时间转换为String
【注意:需要指定日期格式化器DateTimeFormatter】
public static LocalDateTime parse(CharSequence s, DateTimeFormatter m)
把String转换为LocalDateTime
【注意:需要指定日期格式化器DateTimeFormatter】
public class jdk8LocalDataTimeDemo04 {
public static void main(String[] args) {
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 12, 13, 14, 15);
System.out.println(localDateTime);
//Date->String
//String format(DateTimeFormatter formatter) 使用指定的格式化程序格式化此日期时间。
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String format = localDateTime.format(pattern);
System.out.println(format);
//String->Data
//static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter)
// 使用特定的格式化程序从文本字符串获取 LocalDateTime的实例
String s = "2020年11月12日 13:14:15";
LocalDateTime parse = LocalDateTime.parse(s, pattern);
System.out.println(parse);
}
}
2.5LocalDateTime加减方法
public LocalDateTime plusDays(long days)
增加、减少指定的天数
public LocalDateTime plusHours(long hours)
增加、减少指定的小时数
public LocalDateTime plusMinutes(long minutes)
增加、减少指定的分钟数
public LocalDateTime plusMonths(long months)
增加、减少指定的月份数
public LocalDateTime plusNanos(long nanos)
增加、减少指定的纳秒数
public LocalDateTime plusSeconds(long seconds)
增加、减少指定的秒数
public LocalDateTime plusWeeks(long weeks)
增加、减少指定的星期数
public LocalDateTime plusYears(long years)
增加、减少指定的年数
2.6LocalDateTime修改方法
public LocalDateTime withYear(int year)
修改年
public LocalDateTime withMonth(int month)
修改月份
public LocalDateTime withDayOfMonth(int dayOfMonth)
修改月中的天
public LocalDateTime withDayOfYear(int dayOfYear)
修改年中的天
public LocalDateTime withHour(int hour)
修改小时
public LocalDateTime withMinute(int minute)
修改分钟
public LocalDateTime withSecond(int second)
修改秒
2.7Period和Duration时间间隔
Period和Duration都用来表示时间间隔
Period:表示年月日的时间间隔
Duration:表示天时分秒的时间间隔
-
Period的方法
public static Period between(LocalDate date1,LocalDate date2) 获取两个LocalDate之间的时间间隔 public int getDays() 获取此期间的天数。 public int getMonths() 获取此期间的月数。 public int getYears() 获取此期间的年数。
-
Duration的方法
public static Duration between(Temporal t1, Temporal t2) 获取两个时间之间的时间间隔对象 public long toDays() 获取在此期间的天数。 public long toHours() 获取在此期间的几个小时数。 public long toMillis() 将此持续时间转换为毫秒内的总长度。 public long toMinutes() 获取在此期间的分钟数。 public longt toHoursPart(); 获取小时的部分 public longt toMinteusPart(); 获取分钟的部分 public longt toSecondPart(); 获取秒中的部分