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 s  2020-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:42             String类型的时间
-----------StringToInstant------------->2020-03-21T06:53:42Z          Instant类型的时间
---------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 2020           Date类型的时间
-------------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     不要使用这种时间

 

你可能感兴趣的:(java开发,时间类型装换,String转换Instant,Instant转换String)