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

Java 同时被 2 个专栏收录
55 篇文章 0 订阅
8 篇文章 0 订阅

简介

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年的数字时间转换成相差8小时正常的字符串格式时间;
     * -比如数字时间:"1590594807"
     * - 原时间格式:"2020-05-27 23:53:27"
     * - 转换后:"2020-05-27 15:53:27"
     * @param time
     * @return
     */
    public static String secondToTimeEight(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)*1000+Long.parseLong(t1.toString());
    		h1-=28800000;//8小时的时间差,可根据需求进行增减
    		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. 实践是检验认识真理性的唯一标准,试一试就知道方法好不好用了~~~

  • 4
    点赞
  • 0
    评论
  • 6
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:撸撸猫 设计师:马嘣嘣 返回首页

打赏作者

尘光掠影

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值