Java中时间日期类

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();
    	获取秒中的部分
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值