Java LocalDateTime,DateTimeFomatter----JDK8新时间类的简单使用
JDK8中增加了一系列时间的类,
(据说)是为了干掉过去的Date,Calendar类的,
过去的Date类(据说)有着线程不安全等诸多弊端,
至于我的个人感受就是用起来实在是很麻烦,我一般封装成几个常用的方法以后每次就调方法,再也不想看里面是怎么实现的了.
而发现了LocalDateTime这种新类以后,经过我的简单的试用,觉得完全可以取代掉之前使用时间的一切方法.非常好用,太好用了.
下面是简单的使用教程:
1,按照自由格式获取当前时间
public static String getTodayByFormat(String timeFormat){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(timeFormat)); }
简直优雅,甚至我都不想封装成方法了,想用随时写,就是这么容易.
2,获取当前年/月/日
一张图说明,想怎么取,想怎么拼,都随便
3,获取前一天
从前我的笨方法是:
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; }
如今有了新方法:
public static String getYesterdayByFormat(String timeFormat){ return LocalDateTime.now().plusDays(1).format(DateTimeFormatter.ofPattern(timeFormat)); }
同理,我都不想为获取X天后/X小时后单独写方法了,就在下面(以增加为例):
返回值是LocalDateTime,也就意味着可以一直链式点下去,想要多少天以后的数据尽管开口,一句写不完算我输.
4,获取已经度过的毫秒/秒
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( 2018 , 1 , 1 , 20 , 31 , 20 );
LocalDateTime
endTime = LocalDateTime.of( 2018 , 1 , 3 , 20 , 31 , 20 );
//比较时间
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());
}
}
|