java开发|string-date-instant 时间类型转换

【java开发|string-date-instant 时间类型转换】生产环境中,为了减少磁盘空间的使用,使用整型的数据存储时间,网上有一些使用的是timestamp进行做为中间值进行过渡,这样感觉不太合理,因为 timestamp 的最大时间是 到2038年,这样有可能会产生问题,另外一方面可能还没发展到2038年,写的代码早就被更新迭代掉了,实际影响不是很大
dataTime 转 int

/** * date 转 integer * @param date * @return */ public static Integer dateToInteger(Date date) { return (int) (date.getTime() / 1000); }

int 转 dataTime
/** * integer 转 date * @param integer * @return */ public static Date integerToDate(Integer integer) { return new Date(integer*1000L); }


时间类型转换。
############################################################
//尽量避免使用这种方式获得 Instant 时间,2020-03-21T15:14:42.071 直接获得本地时间,表示的是 带T 的本地时间,格式是国际时间,时间不是
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("---------localDateTime------------>" + localDateTime);
############################################################
String <-----> Date <-----> Instant
三种时间类型直之间的相互转换
/** * 时间转换 * String <--> date <--> instant * @author y_zzu 2020-03-21-14:48 */ public class TimeUtils {/** * 将时间字符串 转换为Instant 国际时间 * @param string 时间 * @return Instant */ public static final Instant StringToInstant(String string) { DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //将 string 装换成带有 T 的国际时间,但是没有进行,时区的转换,即没有将时间转为国际时间,只是格式转为国际时间 LocalDateTime parse = LocalDateTime.parse(string, dateTimeFormatter); //+8 小时,offset 可以理解为时间偏移量 ZoneOffset offset = OffsetDateTime.now().getOffset(); //转换为 通过时间偏移量将 string -8小时 变为 国际时间,因为亚洲上海是8时区 Instant instant = parse.toInstant(offset); return instant; }/** * String ---> date---> Instant * @param s2020-03-21 17:23:54 * @return 2020-03-21T09:23:54Z * @throws ParseException 抛出异常 */ public static final Instant StringToDateToInstant(String s) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse(s); Instant instant = date.toInstant(); return instant; }/** * instant 转成 String * @param instant 国际时间 * @return */ public static final String InstantToDateToString(Instant instant) { //将 instant 转成 date Date from = Date.from(instant); //将 date 转成 string,调用上面的方法 String string = DateToString(from); /* //或者使用这两句 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String string = dateFormat.format(date); */ return string; }/** * date ---> instant * @param date * @return */ public static final Instant DateToInstant(Date date) { Instant instant = date.toInstant(); return instant; }/** * instant ---> date * @param instant * @return */ public static final Date InstantToDate(Instant instant) { Date from = Date.from(instant); return from; }/** * String ---> date * @param s 2020-03-21 17:23:54 * @return Sat Mar 21 17:23:54 CST 2020 * @throws ParseException */ public static final Date StringToDate(String s) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse(s); return date; }/** * date格式时间 转换为字符串 * @param date 时间 * @return */ public static final String DateToString(Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String string = dateFormat.format(date); return string; }/** * 测试主方法 * @param args */ public static void main(String args[]) throws ParseException {String stringtime = "2020-03-21 14:53:42"; Instant instantStringtime = StringToInstant(stringtime); System.out.println("-----------StringToInstant------------->" + stringtime); System.out.println("-----------StringToInstant------------->" + instantStringtime); String s = "2020-03-21 17:23:54"; System.out.println("---------StringToDateToInstant-------->" + s); Instant instant1 = StringToDateToInstant(s); System.out.println("---------StringToDateToInstant-------->" + instant1); //推荐使用这种方式获得 Instant 时间,获得当前的国际时间,instant,020-03-21T07:14:42.071Z Instant instant = Instant.now(); System.out.println("---------InstantToDateToString------------>" + instant); String instantToString = InstantToDateToString(instant); System.out.println("---------InstantToDateToString------------>" + instantToString); Date date = new Date(); System.out.println("-------------DateToInstant---------------->" + date); Instant instant2 = DateToInstant(date); System.out.println("-------------DateToInstant---------------->" + instant2); Instant instant3 = Instant.now(); System.out.println("---------InstantToDate--------->" + instant3); Date date2 = InstantToDate(instant3); System.out.println("---------InstantToDate--------->" + date2); String s1 = "2020-03-21 17:45:55"; System.out.println("-----------StringToDate----------->" + s1); Date date1 = StringToDate(s1); System.out.println("-----------StringToDate----------->" + date1); //获得 Sat Mar 21 15:12:26 CST 2020 英文字母的时间 Date date3 = new Date(); System.out.println("----------DateToString----------->" + date3); String sdate = DateToString(date3); System.out.println("----------DateToString----------->" + sdate); //尽量避免使用这种方式获得 Instant 时间,2020-03-21T15:14:42.071 直接获得本地时间,表示的是 带T 的本地时间,格式是国际时间,时间不是 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("---------localDateTime------------>" + localDateTime); } }

如果数据库里存储的时间类型是 Instant 类型,
存储的时候可能会相差8个小时,这个时候,不要手动的进行8小时时差的添加,修改 properties 配置文件
指定当前时区为 Asia/Shanghai
由于我开发的时候使用的是 Hibernate 对数据库进行操作 ,配置文件为
spring.jsp.properties.hibernate.jdbc.time_zone=Asia/Shanghai
-----------StringToInstant------------->2020-03-21 14:53:42String类型的时间
-----------StringToInstant------------->2020-03-21T06:53:42ZInstant类型的时间
---------StringToDateToInstant-------->2020-03-21 17:23:54
---------StringToDateToInstant-------->2020-03-21T09:23:54Z
---------InstantToDateToString------------>2020-03-21T11:21:19.146Z
---------InstantToDateToString------------>2020-03-21 19:21:19
-------------DateToInstant---------------->Sat Mar 21 19:21:19 CST 2020Date类型的时间
-------------DateToInstant---------------->2020-03-21T11:21:19.147Z
---------InstantToDate--------->2020-03-21T11:21:19.152Z
---------InstantToDate--------->Sat Mar 21 19:21:19 CST 2020
-----------StringToDate----------->2020-03-21 17:45:55
-----------StringToDate----------->Sat Mar 21 17:45:55 CST 2020
----------DateToString----------->Sat Mar 21 19:21:19 CST 2020
----------DateToString----------->2020-03-21 19:21:19
---------localDateTime------------>2020-03-21T19:21:19.153不要使用这种时间


    推荐阅读