类似ISO8601时间格式转换

类似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()));
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值