Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

JDK8中增加了一系列时间的类,

(据说)是为了干掉过去的Date,Calendar类的,

过去的Date类(据说)有着线程不安全等诸多弊端,

至于我的个人感受就是用起来实在是很麻烦,我一般封装成几个常用的方法以后每次就调方法,再也不想看里面是怎么实现的了.

而发现了LocalDateTime这种新类以后,经过我的简单的试用,觉得完全可以取代掉之前使用时间的一切方法.非常好用,太好用了.

下面是简单的使用教程:

1,按照自由格式获取当前时间

public static String getTodayByFormat(String timeFormat){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(timeFormat));
    }

简直优雅,甚至我都不想封装成方法了,想用随时写,就是这么容易.

2,获取当前年/月/日

Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

一张图说明,想怎么取,想怎么拼,都随便

3,获取前一天

从前我的笨方法是:

Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用
public static String getYesterdayByFormat(String timeFormat){
        //获取当前日期
        Date date = new Date();
        SimpleDateFormat sf = new SimpleDateFormat(timeFormat);
        //通过秒获取下一天日期
        long time = (date.getTime() / 1000) - 60 * 60 * 24;//
        date.setTime(time * 1000);//毫秒
        String yesterday = sf.format(date).toString();
        return yesterday;
    }
Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

如今有了新方法:

public static String getYesterdayByFormat(String timeFormat){
        return LocalDateTime.now().plusDays(1).format(DateTimeFormatter.ofPattern(timeFormat));
    }

同理,我都不想为获取X天后/X小时后单独写方法了,就在下面(以增加为例):

Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用

返回值是LocalDateTime,也就意味着可以一直链式点下去,想要多少天以后的数据尽管开口,一句写不完算我输.

 4,获取已经度过的毫秒/秒

Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用


LocalTime :  只包括时间

LocalDate : 只包括日期

LocalDateTime : 包括日期和时间


 

JDBC映射

LocalTime 对应 time

LocalDate 对应 date

LocalDateTime 对应 timestamp


 

以下测试代码

简直好用到爆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class TimeTest {
 
    @Test
    public void testTime() {
        LocalDateTime time = LocalDateTime.now();
 
        System.out.println(time.toString()); //字符串表示
        System.out.println(time.toLocalTime()); //获取时间(LocalTime)
        System.out.println(time.toLocalDate()); //获取日期(LocalDate)
        System.out.println(time.getDayOfMonth()); //获取当前时间月份的第几天
        System.out.println(time.getDayOfWeek());  //获取当前周的第几天
        System.out.println(time.getDayOfYear());  //获取当前时间在该年属于第几天
        System.out.println(time.getHour());
        System.out.println(time.getMinute());
        System.out.println(time.getMonthValue());
        System.out.println(time.getMonth());
        System.out.println("-----------------------------------");
        //格式化输出
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY/MM/dd HH:mm:ss");
        System.out.println(time.format(formatter));
        //构造时间
        LocalDateTime startTime = LocalDateTime.of(201811203120);
        LocalDateTime endTime = LocalDateTime.of(201813203120);
        //比较时间
        System.out.println(time.isAfter(startTime));
        System.out.println(time.isBefore(endTime));
 
        //时间运算,相加相减
        System.out.println(time.plusYears(2)); //加2年
        System.out.println(time.plusDays(2)); //加两天
        System.out.println(time.minusYears(2)); //减两年
        System.out.println(time.minusDays(2)); //减两天
 
        //获取毫秒数(使用Instant)
        System.out.println(time.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
        //获取秒数(使用Instant)
        System.out.println(time.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond());
    }
 
}