localdatetime.now,localdatetimenow存入数据库
程序包java.time不存在
java.time包时JSR-310的实现,在Java 8 中提供。它的实现目标是克服旧的日期时间实现中所有的缺陷,新的日期/时间API的一些设计原则是:
不变性:新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处。
关注点分离:新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date)、时间(Time)、日期时间(DateTime)、时间戳(unix timestamp)以及时区定义了不同的类。
清晰:在所有的类中,方法都被明确定义用以完成相同的行为。举个例子,要拿到当前实例我们可以使用now()方法,在所有的类中都定义了format()和parse()方法,而不是像以前那样专门有一个独立的类。为了更好的处理问题,所有的类都使用了工厂模式和策略模式,一旦你使用了其中某个类的方法,与其他类协同工作并不困难。
实用操作:所有新的日期/时间API类都实现了一系列方法用以完成通用的任务,如:加、减、格式化、解析、从日期/时间中提取单独部分,等等。
可扩展性:新的日期/时间API是工作在ISO-8601日历系统上的,但我们也可以将其应用在非ISO的日历上。
Java日期/时间API包
Java日期/时间API包含以下相应的包。
java.time包:这是新的Java日期/时间API的基础包,所有的主要基础类都是这个包的一部分,如:LocalDate,
LocalTime, LocalDateTime, Instant, Period,
Duration等等。所有这些类都是不可变的和线程安全的,在绝大多数情况下,这些类能够有效地处理一些公共的需求。
java.time.chrono包:这个包为非ISO的日历系统定义了一些泛化的API,我们可以扩展AbstractChronology类来创建自己的日历系统。
java.time.format包:这个包包含能够格式化和解析日期时间对象的类,在绝大多数情况下,我们不应该直接使用它们,因为java.time包中相应的类已经提供了格式化和解析的方法。
java.time.temporal包:这个包包含一些时态对象,我们可以用其找出关于日期/时间对象的某个特定日期或时间,比如说,可以找到某月的第一天或最后一天。你可以非常容易地认出这些方法,因为它们都具有“withXXX”的格式。
java.time.zone包:这个包包含支持不同时区以及相关规则的类。
java8新增了localdate和localtim,要如何处理日期和时间?
JDK8中,新增了三个类,用以处理时间。
LocalDate专门处理日期,LocalTime专门处理时间,LocalDateTime包含了日期和时间,而且对于很多复杂的问题,都提供了现成的方法,比如:获取2017年12月的第一个周一,这样的处理,在以前,是很复杂的,而现在,只需要一行代码即可。(使用前,需要将JDK升级到1.8)
下面,简单了记录了这两个类的一些常见用法:
[java]?view plain?copy
package?test;
import?java.time.DayOfWeek;
import?java.time.LocalDate;
import?java.time.LocalDateTime;
import?java.time.LocalTime;
import?java.time.temporal.TemporalAdjusters;
import?java.util.Calendar;
/**
*?Created?by?lightClouds917
*?Date?2017/11/6
*?Description:Java8中处理时间和日期的类
*
SQL??-?Java
--------------------------
date?-?LocalDate
time?-?LocalTime
timestamp?-?LocalDateTime
*/
public?class?DateTest2?{
public?static?void?main(String[]?args){
test1(); ? ? ?
test2();
Calendar?calendar?=?Calendar.getInstance();
System.out.println(calendar.getTime());
}
/**
*?处理日期?LocalDate
*/
public?static?void?test1(){
//获取当前日期???2017-11-06
LocalDate?today?=?LocalDate.now();
System.out.println(today); ?
//构造日期???2017-10-08
LocalDate?today2?=?LocalDate.of(2017,10,8);
System.out.println(today2);
//构造日期???2017-02-22????字符串严格按照yyyy-MM-dd ? ? ?
LocalDate?today3?=?LocalDate.parse("2017-02-22");
System.out.println(today3);
//本月第一天??2017-11-01
LocalDate?firstDayOfMonth?=?today.with(TemporalAdjusters.firstDayOfMonth());
System.out.println(firstDayOfMonth);
//本月第二天??2017-11-02???第n天
LocalDate?secondDayOfMonth?=?today.withDayOfMonth(2);
System.out.println(secondDayOfMonth);
//本月最后一天?2017-02-28??方便解决任何年份的二月份多少天
LocalDate?lastDayOfMonth?=?today3.with(TemporalAdjusters.lastDayOfMonth());
System.out.println(lastDayOfMonth);
//获取2017年12月的第一个周一???2017-12-04 ?
LocalDate?firstDayOf201712?=?LocalDate.parse("2017-12-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println(firstDayOf201712);
}
/**
*?处理时间??LocalTime
*/
public?static?void?test2(){
//获取当前时间??含有毫秒值??17:18:41.571
LocalTime?now?=?LocalTime.now();
System.out.println(now);
//获取当前时间???去掉毫秒值???17:45:41
LocalTime?now1?=?LocalTime.now().withNano(0);
System.out.println(now1);
//00:46:46.651??提供了把时分秒都设为0的方法
LocalTime?now2?=?LocalTime.now().withHour(0);
System.out.println(now2);
//构造时间??00:20:55 ?
LocalTime?time1?=?LocalTime.of(0,20,55);
System.out.println(time1);
//构造时间??05:43:22
LocalTime?time2?=?LocalTime.parse("05:43:22");
System.out.println(time2);
//标准时间?2017-11-06T17:53:15.930
LocalDateTime?lt?=?LocalDateTime.now();
System.out.println(lt);
}
}
MP高级功能-自动填充
针对项目中有新增时间,修改时间,新增人,修改人等字段;
最笨的办法是:新增时,new Date()或者是java8的LocalDateTime.now()来设置到新增时间上;修改时,再new Date()设置到修改字段上;只要是有这两个字段的地方都这么干,每一块都写一次。
再进一步,可以再sql中直接写入mysql的内置函数,比如:update_time=now();不过针对新增人,修改人却用不用了内置函数,添加不了默认值了。
最终,我们可以使用MP提供的自动填充功能。
如何在java8中愉快地处理日期和时间java8新增了localdate和localtim
java8中的localdate和localtime用法举例如下:
这两个方法使我们可以方便的实现将旧的日期类转换为新的日期类,具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime(这个类可以很容易获取LocalDate和LocalTime),新的日期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date,具体实现细节如下:
// 01. java.util.Date -- java.time.LocalDateTime
public void UDateToLocalDateTime() {
java.util.Date date = new java.util.Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
}
// 02. java.util.Date -- java.time.LocalDate
public void UDateToLocalDate() {
java.util.Date date = new java.util.Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
LocalDate localDate = localDateTime.toLocalDate();
}
// 03. java.util.Date -- java.time.LocalTime
public void UDateToLocalTime() {
java.util.Date date = new java.util.Date();
Instant instant = date.toInstant();
ZoneId zone = ZoneId.systemDefault();
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
LocalTime localTime = localDateTime.toLocalTime();
}
// 04. java.time.LocalDateTime -- java.util.Date
public void LocalDateTimeToUdate() {
LocalDateTime localDateTime = LocalDateTime.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
java.util.Date date = Date.from(instant);
}
// 05. java.time.LocalDate -- java.util.Date
public void LocalDateToUdate() {
LocalDate localDate = LocalDate.now();
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
java.util.Date date = Date.from(instant);
}
// 06. java.time.LocalTime -- java.util.Date
public void LocalTimeToUdate() {
LocalTime localTime = LocalTime.now();
LocalDate localDate = LocalDate.now();
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
java.util.Date date = Date.from(instant);
}
spring boot比较当前时间大于过去时间
方法如下:
在任意写的一个main方法中,使用:LocalDateTimenow=LocalDateTime.now(),获取到的当前时间都是正确的,但是在springboot启动后,任意一个方法中使用上述获取当前时间都是比当前系统时间早8个小时。
Java获取当前时间前几个小时
import?java.time.LocalDateTime;
import?java.time.temporal.ChronoUnit;
/**
?*?@author?red
?*?@since?1.8
?*/
public?class?App?{
????public?static?void?main(String[]?args)?{
????????//当前时间
????????LocalDateTime?dateTime?=?LocalDateTime.now();
????????//当前时间两个小时前
????????LocalDateTime?before?=?dateTime.minus(2,?ChronoUnit.HOURS);
????????//当前时间两个小时后
????????LocalDateTime?after?=?dateTime.plus(2,?ChronoUnit.HOURS);
????}
}