Java 和 android 时间类工具(DateUtils)
该工具类,支持long、string、date三类型转换
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author Jiang zinc
* @date 创建时间:2018/11/5
* @description 时间格式类
* 支持格式:
* 【Java 和 android 时间类工具(DateUtils)】 * long -> String :{@link #_getDateStringViaTimeStamp}
* long -> Date{@link Date} :{@link #getDateViaTimeStamp}
* String -> long :{@link #_getTimeStampViaString}
* String -> Date{@link Date} :{@link #_getDateViaString}
* Date{@link Date} -> String :{@link #_getDateStringViaDate}
* Date{@link Date} -> long :{@link #getTimeStampViaDate}
*/public class DateUtils {private static final String ISO_8601 = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
private static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static final Map, SimpleDateFormat> dateFormatMap = new HashMap<>();
/**
* 获取 格式化的 format
*
* @param pattern 格式,可参见{@link #ISO_8601}
* @return
*/
private static SimpleDateFormat _getDateFormat(String pattern) {
SimpleDateFormat dateFormat = dateFormatMap.get(pattern);
if (dateFormat == null) {
dateFormat = new SimpleDateFormat(pattern);
dateFormatMap.put(pattern, dateFormat);
}
return dateFormat;
}//=============================Date -> String start===================================/**
* 按照 dataFormat 格式,获取 date 的时间
* Date -> String
*
* @param date时间
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @return
*/
private static String _getDateStringViaDate(Date date, String dateFormat) {
return _getDateFormat(dateFormat).format(date);
}/**
* 按照 dateFormat 格式,获取 当前date 的时间
* Date(当前时间) -> String
*
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @return
*/
private static String _getCurrentDateStringViaDate(String dateFormat) {
return _getDateStringViaDate(new Date(), dateFormat);
}/**
* 传入Data类型日期,返回字符串类型时间(ISO8601标准时间)
* Date -> String(ISO_8601格式)
*
* @param date 时间date
* @return
*/
public static String getISO8601Timestamp(Date date) {
return _getDateStringViaDate(date, ISO_8601);
}/**
* 获取当前 ISO8601标准时间
* Date(当前时间) -> String(ISO_8601格式)
*
* @return
*/
public static String getCurrentISO8601Timestamp() {
return _getCurrentDateStringViaDate(ISO_8601);
}//=============================Date -> String end===================================//=============================long -> String start===================================/**
* 获取 格式化时间 通过 时间戳
* long -> String(指定的dateFormat格式)
*
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @param timeStamp13位的时间戳(含毫秒)
* @return
*/
private static String _getDateStringViaTimeStamp(String dateFormat, long timeStamp) {
return _getDateFormat(dateFormat).format(timeStamp);
}/**
* 获取 格式化时间 通过 当前时间戳
* long(当前时间) -> String(指定的dateFormat格式)
*
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @return
*/
private static String _getDateStringViaCurrentTimeStamp(String dateFormat) {
return _getDateStringViaTimeStamp(dateFormat, System.currentTimeMillis());
}/**
* 获取 ISO8601格式化时间 通过 时间戳
* long -> String(ISO8601格式)
*
* @param timeStamp 13位的时间戳(含毫秒)
* @return
*/
public static String getISO8601StringViaTimeStamp(long timeStamp) {
return _getDateStringViaTimeStamp(ISO_8601, timeStamp);
}/**
* 获取 ISO8601格式化时间 通过 当前时间戳
* long(当前时间戳) -> String(ISO8601格式)
*
* @return
*/
public static String getISO8601StringViaCurrentTimeStamp() {
return _getDateStringViaCurrentTimeStamp(ISO_8601);
}
//=============================long -> String end===================================//=============================String -> long start===================================/**
* 获取 13位时间戳 通过 时间字符串
* String -> long
*
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @param dateString 时间字符串,格式有 dateFormat 决定
* @return 正确解析,返回13位的时间戳;错误返回-1
*/
private static long _getTimeStampViaString(String dateFormat, String dateString) {
try {
return _getDateFormat(dateFormat).parse(dateString).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return -1;
}/**
* 获取 13位时间戳 通过 时间字符串
* String(ISO8601格式) -> long
*
* @param dateString ISO8601格式 时间字符串
* @return 正确解析,返回13位的时间戳;错误返回-1
*/
private static long getTimeStampViaISO8601String(String dateString) {
return _getTimeStampViaString(ISO_8601, dateString);
}
//=============================String -> long end===================================//=============================Date -> long start===================================/**
* 获取 时间戳 通过 Date
* Date -> long
*
* @param date
* @return
*/
public static long getTimeStampViaDate(Date date) {
return date.getTime();
}
//=============================Date -> long end===================================//=============================long -> Date start===================================/**
* 获取 Date 通过 时间戳
*
* @param timeStamp 13位的时间戳(含毫秒)
* @return
*/
public static Date getDateViaTimeStamp(long timeStamp) {
return new Date(timeStamp);
}
//=============================long -> Date end===================================//=============================String -> Date start===================================/**
* 获取 Date 通过 字符串
* Date -> String
*
* @param dateFormat 格式,可以参考{@link #ISO_8601}
* @param dateString ISO8601格式 时间字符串
* @return 成功的话,返回 dateString 对应的 Date;
失败,返回当前的null
*/
public static Date _getDateViaString(String dateFormat, String dateString) {
SimpleDateFormat simpleDateFormat = _getDateFormat(dateFormat);
try {
return simpleDateFormat.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}/**
* 获取 Date 通过 字符串
* Date -> String(ISO8601 格式)
*
* @param dateString ISO8601格式 时间字符串
* @return 成功的话,返回 dateString 对应的 Date;
失败,返回当前的null
*/
public static Date getDateViaISO8601String(String dateString) {
return _getDateViaString(ISO_8601, dateString);
}//=============================String -> Date end===================================public static void main(String[] args) throws ParseException {/**
* long -> String :{@link #_getDateStringViaTimeStamp}
* long -> Date{@link Date} :{@link #getDateViaTimeStamp}
* String -> long :{@link #_getTimeStampViaString}
* String -> Date{@link Date} :{@link #_getDateViaString}
* Date{@link Date} -> String :{@link #_getDateStringViaDate}
* Date{@link Date} -> long :{@link #getTimeStampViaDate}
*/long timeStamp = 1541406716848L;
Date date = new Date();
String isoString = "2018-11-05T16:31:56.848Z";
System.out.println("long -> String");
System.out.println("long: " + timeStamp + "===> String: " + getISO8601StringViaTimeStamp(timeStamp));
System.out.println("long -> Date");
System.out.println("long: " + timeStamp + "===> Date: " + getDateViaTimeStamp(timeStamp));
System.out.println("String -> long");
System.out.println("String:" + isoString + "===> long:" + getTimeStampViaISO8601String(isoString));
System.out.println("String -> Date");
System.out.println("String:" + isoString + "===> Date:" + getDateViaISO8601String(isoString));
System.out.println("Date -> long");
System.out.println("Date:" + date + "===> long:" + getTimeStampViaDate(date));
System.out.println("Date -> String");
System.out.println("Date:" + date + "===> String:" + getISO8601Timestamp(date));
}}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- android第三方框架(五)ButterKnife
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任