java的String、timestamp、Date、秒数等各种时间格式相互转换

版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/78979737

简介

  1. 在做项目功能的时候,由于数据源、数据类型等的不同,导致出现各种不同格式的时间,而我们在使用这些时间的时候往往会遇到格式转换的问题;
  2. 下面是总结在项目中可能会遇到的一系列时间格式转换问题以及转换方法;
  3. 这些方法基本上都能够解决实际问题;

项目实践

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class TimeChangeAround {

    /**
     * 将普通时间格式转换成相差8小时的timestamp格式,参数Date类型
     * 比如普通时间格式:new Date()
     * 转换后的timestamp时间:2018-01-05T03:02:53Z
     * @param datetime 类型为Date
     * @return
     */
    public static String formatDateToTimestamp(Date datetime){
        SimpleDateFormat sdFormat=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        Calendar date2=Calendar.getInstance();
        date2.setTime(datetime);
        date2.set(Calendar.HOUR, date2.get(Calendar.HOUR)-8);
        Date endDate=null;
        try {
            endDate =sdFormat.parse(sdFormat.format(date2.getTime()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        sdFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
        String date=sdFormat.format(endDate);
//        Timestamp stamp=Timestamp.valueOf(date);
        return date;
    }

    /**
     * 将普通时间格式转换成相差8小时的timestamp时间格式,参数String类型
     * 比如string时间:"2018-01-05 11:03:05"
     * 转换后的timestamp时间:2018-01-05T03:03:05Z
     * @param date 类型为string
     * @return
     */
    public static String formatStringToTimestamp(String date) {
        String resultDate = "";
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        try {
            Object obj = sim.parse(date).getTime();
            String ooo = obj.toString();
            long stimes = Long.parseLong(ooo);
            stimes = stimes - 28800000;
            Calendar qcalendar = Calendar.getInstance();
            qcalendar.setTimeInMillis(stimes);
            resultDate = sdf.format(qcalendar.getTime());

        } catch (ParseException e1) {
            return "";
        }
        return resultDate;
    }

    /**
     * 将timestamp格式转换成正常的时间格式,参数String类型
     * 比如timestamp格式时间:"2018-01-05T03:03:05Z"
     * 转换后的DateString时间:"2018-01-05 11:03:05"
     * @param timestamp  参数格式timestamp
     * @return
     */
    public static String timestampToDateString(String timestamp){
        String resultDate = "";
        try {
            SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
//          String timestamp1 = timestamp.substring(0,timestamp.indexOf("."))+"Z";
            Object obj = sdf.parse(timestamp).getTime();
            String ooo = obj.toString();
            long stimes = Long.parseLong(ooo);
            stimes = stimes + 28800000;
        /*  Calendar qcalendar = Calendar.getInstance();
            qcalendar.setTimeInMillis(stimes);*/
            Date da = new Date(stimes);
            resultDate = sim.format(da.getTime());

        } catch (Exception e1) {
            return "";
        }
        return resultDate;
    }

    /**
     * 将距离1970年的数字时间转换成正常的字符串格式时间;
     * 比如数字时间:"1513345743"
     * 转换后:"2017-12-15 21:49:03"
     * @param time
     * @return
     */
    public static String secondToTime(String time){
        String dateStr="1970-1-1 08:00:00";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           if (time.equals("0")) {
            return "";
        }
           Date miDate;
           String returnstr="";
        try {
            miDate = sdf.parse(dateStr);
            Object t1=miDate.getTime();
            long h1=Long.parseLong(time.toString())*1000+Long.parseLong(t1.toString());
            returnstr=sdf.format(h1);
        } catch (ParseException e) {
            e.printStackTrace();
        }
            return returnstr;
    }

    /**
     * 将现在的正常字符串格式时间转换成距离1970的数字时间
     * 比如字符串格式时间:"2017-12-15 21:49:03"
     * 转换后的数字时间:"1513345743"
     * @param time  
     * @return
     */
    public static Long timeToSecond(String time){
        String dateStr="1970-1-1 08:00:00";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long aftertime=0;
        try {
            Object d1=sdf.parse(time).getTime();
            Date miDate = sdf.parse(dateStr);
            Object t1=miDate.getTime();
            long d1time=Long.parseLong(d1.toString())/1000;
            long t1time=Long.parseLong(t1.toString())/1000;
            aftertime = d1time-t1time;
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return aftertime;   

    }
    /**
     * 将字符串时间格式转换成Date时间格式,参数String类型
     * 比如字符串时间:"2017-12-15 21:49:03"
     * 转换后的date时间:Fri Dec 15 21:49:03 CST 2017
     * @param datetime 类型为String
     * @return
     */
    public static Date StringToDate(String datetime){
        SimpleDateFormat sdFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        try {
            date = sdFormat.parse(datetime);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 将Date时间格式转换成字符串时间格式,参数Date类型
     * 比如Date时间格式:new Date()
     * 转换后的String格式:2018-01-05 11:54:35
     * @param datetime 类型为Date
     * @return
     */
    public static String DateToString(Date datetime){
        SimpleDateFormat sdFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date=sdFormat.format(datetime);
        return date;
    }   
    public static void main(String[] args) {
        System.out.println(timeToSecond("2017-12-15 21:49:03"));
    }

}

总结

  1. 以上就是对项目中可能会出现的各种时间格式转换的问题以及解决方法,还有其他未涉及到的欢迎补充;
  2. 实践是检验认识真理性的唯一标准,试一试就知道方法好不好用了~~~

上一篇:使用laravel一分钟搭建CURD后台页面


下一篇:eclipse搭建ssh后台