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

简介: 版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/78979737 简介  1.
版权声明:本文为博主原创文章,如需转载,请标明出处。 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. 实践是检验认识真理性的唯一标准,试一试就知道方法好不好用了~~~

相关文章
|
25天前
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
Java 中的 String Pool 简介
|
1月前
|
缓存 安全 Java
java 为什么 String 在 java 中是不可变的?
本文探讨了Java中String为何设计为不可变类型,从字符串池的高效利用、哈希码缓存、支持其他对象的安全使用、增强安全性以及线程安全等方面阐述了不可变性的优势。文中还通过具体代码示例解释了这些优点的实际应用。
java 为什么 String 在 java 中是不可变的?
|
3月前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第14天】Java零基础教学篇,手把手实践教学!
128 65
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
118 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
25天前
|
存储 Java
Java 11 的String是如何优化存储的?
本文介绍了Java中字符串存储优化的原理和实现。通过判断字符串是否全为拉丁字符,使用`byte`代替`char`存储,以节省空间。具体实现涉及`compress`和`toBytes`方法,前者用于尝试压缩字符串,后者则按常规方式存储。代码示例展示了如何根据配置决定使用哪种存储方式。
|
2月前
|
Java
在Java中如何将基本数据类型转换为String
在Java中,可使用多种方法将基本数据类型(如int、char等)转换为String:1. 使用String.valueOf()方法;2. 利用+运算符与空字符串连接;3. 对于数字类型,也可使用Integer.toString()等特定类型的方法。这些方法简单高效,适用于不同场景。
63 7
|
3月前
|
Java 测试技术 开发者
Java零基础-indexOf(String str)详解!
【10月更文挑战第13天】Java零基础教学篇,手把手实践教学!
64 1
|
4月前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
49 0
java基础(13)String类
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
61 2
|
3月前
|
Java
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性
本文深入探讨了Java中方法参数的传递机制,包括值传递和引用传递的区别,以及String类对象的不可变性。通过详细讲解和示例代码,帮助读者理解参数传递的内部原理,并掌握在实际编程中正确处理参数传递的方法。关键词:Java, 方法参数传递, 值传递, 引用传递, String不可变性。
73 1
【编程基础知识】(讲解+示例实战)方法参数的传递机制(值传递及地址传递)以及String类的对象的不可变性