黑马程序员——————> Java8的日期,时间类

 

------- android培训、java培训、期待与您交流! ----------

Date类

Java提供了Date类来处理日期,时间,Date对象即包含日期,也包含时间。Date类从JDK1.0起就存在了,但正因为它历时悠久,所以它的大部分构造器,方法都已经过时了,不再推荐使用了。

Date类提供了6个构造器,其中四个已经Deprecated,剩下的两个构造器如下。

Date(); 生成一个代表当前日期时间的Date对象,该构造器在底层调用System,currenTimeMillis() 获得long整数作为日期参数,

Date(long date):根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT 1970年1月1日 00:00:00之间的时间差,以毫秒作为计时单位。

 

 

与构造器相同的是,Date对象的大部分方法也Deprecated了,剩下为数不多的几个方法。

boolean after(Date when): 测试该日期是否在指定日期之后。

boolean before(Date when):测试该日期是否在指定日期when之前。

long getTime():返回该时间对应的long型整数,即从GMT 1970-01-01 00:00:00 到该Date对象之间的时间差,以毫秒作为计时单位。

void setTime(long time):设置该Date对象的时间。

下面程序示范了Date类的用法。

 

public class DateDemo
{
    public static void main(String[] args)
    {
        Date d1 = new Date();
        System.out.println(d1);
        //获取当前时间之后100ms的时间
        Date d2 = new Date(System.currentTimeMillis() + 100);
        System.out.println(d2);
        System.out.println(d1.compareTo(d2));
        System.out.println(d1.before(d2));
        System.out.println(d1.after(d2));
    }
}


Date是一个设计相当糟糕的类,因此java官方推荐尽量少用Date的构造器和方法。如果需要对日期,时间进行加减运算,或获取指定时间的年,月,日,时,分,秒,信息,可使用Calendar工具类。

 

Calendar类

因为Date类在设计上存在一些缺陷,所以java提供了Calendar类来更好的处理日期和时间。Calendar是一个抽象类,它用于表示日历。

Calendar是一个抽象类,所以不能使用构造器来创建Calendar对象,但它提供了几个静态getInstance()方法来获取Calendar对象,这些方法根据TimeZone,Locale来创建Calendar

Calendar 与Date都是表示日期的工具类,它们直接可以自由转换,如下代码所示。

 

//创建一个默认的Calendar对象
        Calendar calendar = Calendar.getInstance();
        
        //从Calendar对象中取出Date对象
        Date date = calendar.getTime();
        System.out.println(date);
        
        //通过Date对象获得对应的Calendar对象
        //因为Calendar没有构造函数可以接收Date对象
        //所以必须先获得一个Calendar实例,然后调用其setTime()方法
        Calendar calendar2 = Calendar.getInstance();
        calendar.setTime(date);

 

 

 

java8新增的日期,时间包。以下是常用类的使用方法。

  1 public class TimeDemo 
  2 {
  3     public static void main(String[] args) 
  4     {
  5         //-----下面是关于Clock的用法------------------------------------------------------------------
  6         //获取当前Clock
  7         Clock clock = Clock.systemUTC();
  8         //通过Clock获取当前的时刻
  9         System.out.println("当前时刻为:" + clock.instant());
 10         
 11         //获取对应的毫秒数,与System.currentTimeMillis()输出相同
 12         System.out.println(clock.millis());
 13         System.out.println(System.currentTimeMillis());
 14         
 15         //-----下面是关于Duration的用法------------------------------------------------------------
 16         Duration d = Duration.ofSeconds(6000);
 17         System.out.println("6000秒相当于" + d.toMinutes() + "分");
 18         System.out.println("6000秒相当于" + d.toHours() + "小时");
 19         System.out.println("6000秒相当于" + d.toDays() + "天");
 20         
 21         //在clock基础上增加6000秒,返回新的clock
 22         Clock clock2 = Clock.offset(clock, d);
 23         //可以看到clock2与clock相差1小时40分
 24         System.out.println("当前时刻加6000秒为:" + clock2.instant());
 25         
 26         //----------------下面是关于Instant的用法------------------------------------------------------
 27         //获取当前时间
 28         Instant instant1 = Instant.now(); 
 29         System.out.println("当前时刻为:" + instant1);
 30         
 31         //instant增加6000秒,返回新的instant
 32         Instant instant2 = instant1.plusSeconds(6000);
 33         System.out.println("当前时刻加6000秒为:" + instant2);
 34         
 35         //根据字符串解析Instant对象
 36         Instant instant3 = Instant.parse("2016-02-23T03:29:50.342Z");
 37         System.out.println(instant3);
 38         
 39         //在instant3的基础上添加 5小时4分钟
 40         Instant instant4 = instant3.plus(Duration.ofHours(5).plusMinutes(4));
 41         System.out.println(instant4);
 42         
 43         //获取instant4的5天以前的时刻
 44         Instant instant5 = instant4.minus(Duration.ofDays(5));
 45         System.out.println(instant5);
 46         
 47         //------下面是关于LocalDate的用法-------------------------------------------------
 48         LocalDate localDate = LocalDate.now();
 49         System.out.println(localDate);
 50         
 51         //获得2014 年的第146天
 52         localDate = LocalDate.ofYearDay(2014, 146);
 53         System.out.println(localDate);        //2014-05-26
 54         
 55         //设置为2014年5月21日
 56         localDate = LocalDate.of(2014, Month.MAY, 21);
 57         System.out.println(localDate);         //2014-05-21
 58         
 59         //-----下面是关于LocalTime的用法-------------------------------------------------------
 60         //获取当前时间
 61         LocalTime localTime = LocalTime.now();
 62         
 63         //设置为22点33分
 64         localTime = LocalTime.of(22, 33);
 65         System.out.println(localTime);         //22:33
 66         
 67         //返回一天中的第5503秒
 68         localTime = LocalTime.ofSecondOfDay(5503);
 69         System.out.println(localTime);     //01:31:43
 70         
 71         //-----下面是关于LocalDateTime的用法-------------------------------------------------------
 72         //获取当前日期,时间
 73         LocalDateTime localDateTime = LocalDateTime.now();
 74         System.out.println(localDateTime);
 75         
 76         //当前日期,时间加上25小时3分钟
 77         LocalDateTime future = localDateTime.plusHours(25).plusMinutes(3);
 78         System.out.println("当前日期,时间的25小时3分钟之后:" + future);
 79         
 80         
 81         //-----下面是关于Year, YearMonth,MonthDay的用法-------------------------------------------
 82         Year year = Year.now();     //获取当前的年份
 83         System.out.println("当前的年份:" + year);
 84         
 85         year = year.plusYears(5);    //当前年份再加5年
 86         System.out.println("当前年份再过5年" + year);
 87         
 88         //根据指定月份获取 YearMonth
 89         YearMonth ym = year.atMonth(10);
 90         System.out.println("year年10月:" + ym);  //2021-10
 91         
 92         //当前年月再加5年,减3个月
 93         ym = ym.plusYears(5).minusMonths(3);
 94         System.out.println("当前年月再加5年,减3个月:" + ym);
 95         
 96         
 97         MonthDay md = MonthDay.now();
 98         System.out.println("当前月日:" + md);   //--02-23
 99         
100         //设置为5月23日
101         MonthDay md2 = md.with(Month.MAY).withDayOfMonth(23);
102         System.out.println("5月23日为" + md2);
103         
104         
105     }
106 }

 

转载于:https://www.cnblogs.com/-9527/p/5208623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值