类似ISO8601时间格式处理,示例:2019-07-12T10:45:35.082+08:00
将这种时间转换成Timestamp存储到数据库,或者是将Date类型的时间转换成这种格式的时间。
参考网上的各种方法,总结了一个工具类,如下
package com.manage.controller;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class TimeFormat {
/**
* 世界基准时间时区
*/
private static final String TIME_ZONE = "GMT";
/**
* 时间格式字符串,年月日时分秒毫秒,示例:2020-07-29T15:52:36.244
*/
public static final String FORMAT_MILLI = "yyyy-MM-dd'T'HH:mm:ss.SSS";
/**
* 时间格式字符串,年月日时分秒,示例:2020-07-29T15:52:36
*/
public static final String FORMAT_SEC = "yyyy-MM-dd'T'HH:mm:ss";
/**
* 传入ISO8602格式字符串,返回日期类型Timestamp
* 传入参数类似:"2019-07-11T10:45:35.082+0800"
* @param sTime
* @return
*/
public static Timestamp convertTimeString(String sTime){
DateTimeFormatter parser = ISODateTimeFormat.dateTime();
DateTime dt = parser.parseDateTime(sTime);
Timestamp timestamp = new Timestamp(dt.getMillis());
return timestamp;
}
/**
* 传入ISO8602格式字符串,返回日期类型Timestamp
* 传入参数类似:"2019-07-11T10:45:35.082+08:00"
* colon 冒号
* @param sTime
* @return
*/
public static Timestamp convertColonTimeString(String sTime){
Timestamp timestamp = null;
int len = sTime.length();
if(len > 3){
//将“+08:00”变为“+0800”
String str = sTime.substring(0,len - 3) + sTime.substring(len - 2,len);
timestamp = convertTimeString(str);
}
return timestamp;
}
/**
* 获取当前时区字符串,类似"+0800"
* GMT 世界基准时间
* @return
*/
//东八区--->+08:00,获取的格式类似于“+08:00”,不会出现“CET”这种某些地区“标准时间”的格式
public static String getTimeZone() {
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(TIME_ZONE), Locale.getDefault());
String timeZone = new SimpleDateFormat("Z").format(calendar.getTime());
return timeZone;
}
/**
* 获取当前时区字符串,类似"+08:00"
* GMT 世界基准时间
* colon 冒号
* @return
*/
public static String getColonTimeZone(){
String timeZone = getTimeZone();
return "" + timeZone.substring(0, 3) + ":" + timeZone.substring(3, 5);
}
/**
* 传入Date类型日期,返回字符串类型时间(ISO8601标准时间)
* 返回值类似:"2019-07-12T10:45:35.082+08:00"
* @param date
* @return
*/
public static String getColonISO8601Time(Date date){
// TimeZone tz = TimeZone.getDefault();
// DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSS’Z’”);
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSS”);
String time = df.format(date);
//时间字符串拼接时区字符串
time += getColonTimeZone();
return time;
}
/**
* 传入Date类型日期,返回字符串类型时间(ISO8601标准时间)
* 返回值类似:"2019-07-12T10:45:35.082+0800"
* @param date
* @return
*/
public static String getISO8601Time(Date date){
// TimeZone tz = TimeZone.getDefault();
// DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSS’Z’”);
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss.SSS”);
String time = df.format(date);
//时间字符串拼接时区字符串
time += getTimeZone();
return time;
}
/**
* 获取当前时区的偏移小时,相对于基准时间
* 比如 东八区--->8
* @return
*/
public static int getTimeZoneOffset() {
Calendar calendar = new GregorianCalendar();
//偏移毫秒数求出小时数
return calendar.getTimeZone().getOffset(System.currentTimeMillis()) / 1000 / 60 /60;
}
public static void main(String[] args) {
//2020-07-29T15:20:07.626+08:00
String str = "2019-07-12T10:45:35.082+08:00";
// String str = “2018-07-26T15:00:00.000+08:00”;
// Timestamp timestamp = getISO8601ToTimestamp(str);
Timestamp timestamp = convertColonTimeString(str);
System.out.println(timestamp);
//2019-07-12 10:45:35.082
System.out.println(getISO8601Time(new Date()));
}
}