Java时间类型以及前端和数据端的传输
Java时间类型以及前端和数据端的传输
1. Java时间类型
-
Date
- Date类是一般我们用的比较多的一个类,而Date类其实不止一个包有,即有很多包的子类都有Date类,如下图所示
-
虽然sql也有一个Date类,但其实相对而言,用的更多的是util包下的Date,所以也就以util包下的Date为例
-
构造方法
-
Date():获取当前系统的的时间
-
Date(Long millisec):获取传入的时间戳(毫秒数)的时间
(时间戳是 1970 年 1 月 1 日(00:00:00 )至当前时间的总秒数;)
Date date = new Date(); System.out.println(date); Date date1 = new Date(1577808000000L); System.out.println(date1);
-
-
对于Date有几个常用的方法
-
long getTime( ):返回自1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数.
-
boolean after(Date date):两个日期的比较,如果调用的对象在传入的参数之后则返回true.
-
boolean before(Date date):两个日期的比较,如果调用的对象在传入的参数之前则返回true.
Long timeStamp = date.getTime();System.out.println(timeStamp);boolean f = date.before(date1);boolean f1 = date.after(date1);System.out.println(f+"=="+f1);
-
-
DateFormate
-
对于DateFormate类,一般我们最常用的就是用来格式化时间,因为这个类为抽象类,所以需要子类SimpleDateFormat来实现。
-
比如将时间(2022-10-19-10-29)格式化为(2022-10-19/10:30)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/HH:mm"); String time1 = "2022-10-19-10-29"; Date date1 = sdf.parse(time1); System.out.println(date1);
常用的占位符y 四位数年份M ⽉d ⽇h 时 在上午或下午 (1~12)H 时 在⼀天中 (0~23)m 分s 秒S 毫秒
-
同时,也可以将Date时间按照一定的顺序格式化
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateTime = sdf.format(date); System.out.println(dateTime);
-
-
JDK8新特性
JDK8中,提供了LocalDate,LocalTime,LocalDateTime。
-
LocalDate:只包含年月日的日期
-
LocalTime:只包含时分秒的日期
-
LocalDateTime:包含了日期和时间
-
常用的api:
//getYear() int 获取当前⽇期的年份 //getMonth() Month 获取当前⽇期的⽉份对象 //getMonthValue() int 获取当前⽇期是第⼏⽉ //getDayOfWeek() DayOfWeek 表示该对象表示的⽇期是星期⼏ //getDayOfMonth() int 表示该对象表示的⽇期是这个⽉第⼏天 //getDayOfYear() int 表示该对象表示的⽇期是今年第⼏天 //withYear(int year) LocalDate 修改当前对象的年份 //withMonth(int month) LocalDate 修改当前对象的⽉份 //withDayOfMonth(int dayOfMonth) LocalDate 修改当前对象在当⽉的⽇期 //plusYears(long yearsToAdd) LocalDate 当前对象增加指定的年份数 //plusMonths(long monthsToAdd) LocalDate 当前对象增加指定的⽉份数 //plusWeeks(long weeksToAdd) LocalDate 当前对象增加指定的周数 //plusDays(long daysToAdd) LocalDate 当前对象增加指定的天数 //minusYears(long yearsToSubtract) LocalDate 当前对象减去指定的年数 //minusMonths(long monthsToSubtract) LocalDate 当前对象减去注定的⽉数 //minusWeeks(long weeksToSubtract) LocalDate 当前对象减去指定的周数 //minusDays(long daysToSubtract) LocalDate 当前对象减去指定的天数 //isBefore(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在 other对象⽇期之前 //isAfter(ChronoLocalDate other) boolean ⽐较当前对象⽇期是否在 other对象⽇期之后 //isEqual(ChronoLocalDate other) boolean ⽐较两个⽇期对象是否相等
-
同时JDK8也给它们提供给了日期格式化
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); String str = dtf.format(localDateTime); System.out.println(str+"---");
-
以及提供了计算两个日期差
Duration duration = Duration.between(localDateTime1 , localDateTime); System.out.println(duration.toDays()); System.out.println(duration.toHours());
2.数据库中的时间类型
-
数据库中的时间类型就简单分为DATETIME,TIME,DATE,YEAR,TIMESTAMP
- DATE:存放日期
- TIME:时间值或持续时间
- DATETIME:混合日期和时间值
- YEAR:年份值
- TIMESTAMP:混合日期和时间值,时间戳
-
对于MySQL来说,date类型没有长度,如果定义表的时候给时间类型加一个长度,会报如下错误
- 当然一般使用情况是根据业务需求进行选择不同的。比如如果想只存年份,例如一个学生的入学年份,就可以使用YEAR,如果想保存年月日,就可以用DATE,比如出生日期。
3. 前后端时间交互
-
对于前后端的时间交互,一般可以使用序列化和反序列化来选择如何传值,一般向前端传值使用的是
@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8") 年月日都显示@JsonFormat(pattern="yyyy",timezone = "GMT+8") 只显示年@JsonFormat(pattern="MM-dd",timezone = "GMT+8") 显示月日,不显示年@JsonFormat(pattern="HH:mm:ss",timezone = "GMT+8") 显示时间
要注意的是,使用注解时需要加在实体类中,如下图所示
-
对于前端向后端传值,可以使用
Date min = trainRoundService.minTime(trainId); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); String str = sdf.format(min);
如下图所示
-
来源地址:https://blog.csdn.net/weixin_44691025/article/details/127440192
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341