package com.kpzc.utils;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* @author:鲲鹏展翅
* @description: 操作时间的工具类
*/
public class DateTools {
public static final String JAVA_DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String JAVA_YMDHMS_FORMAT = "yyyyMMddHHmmss";
public static final String JAVA_Y_M_D_FORMAT = "yyyy-MM-dd";
public static final String JAVA_YMD_FORMAT = "yyyyMMdd";
public static final String SQL_DEFAULT_FORMAT = "YYYY-MM-DD HH24:MI:SS";
public static final String SQL_YMDHMS_FORMAT = "YYYYMMDDHH24MISS";
public static final String SQL_Y_M_D_FORMAT = "YYYY-MM-DD";
public static final String SQL_YMD_FORMAT = "YYYYMMDD";
/**
* @return 获取Calendar
*/
public static Calendar getCalendar(){
return Calendar.getInstance();
}
/**
* 获取SimpleDateFormat
* @param format
* @return
*/
public static SimpleDateFormat getSDF(String pattern){
return new SimpleDateFormat(pattern);
}
/**
* 获取DateFormat
* @param format
* @return
*/
public static DateFormat getDF(String pattern){
return getSDF(pattern);
}
/**
* 获取yyyy-MM-dd HH:mm:ss格式的当前日期
* @return
*/
public static String getCurrDateTime(){
return getStringDate(new Date());
}
public static String getStringDate(Date date){
if(date == null)
return null;
return getStringDate(date,JAVA_DEFAULT_FORMAT);
}
public static String getStringDate(Date date,String pattern){
if(date == null || "null".equals(pattern)|| null == pattern || ""==pattern || "NULL".equals(pattern)){
return null;
}
return getSDF(pattern).format(date);
}
/**
* 获取当前时间的时间戳
* @return
*/
public static long getCurrTimetemp(){
return System.currentTimeMillis();
}
/**
* 日期转时间戳
* @param dateStr
* @return
*/
public static long getCurrTimetemp(Date dateStr){
return getTimetemp(dateStr);
}
public static long getTimetemp(Date date){
if(date == null)
return 0;
return date.getTime();
}
/**
* 判断是不是pattern格式的日期
* @param strDate
* @param pattern
* @return true 正确 false 不正确
*/
public static boolean isValidDate(String strDate, String pattern) {
if (strDate == null)
return false;
try {
getSDF(pattern).parse(strDate);
return true;
} catch (Exception e) {
// 格式不对
return false;
}
}
/**
* 时间戳转换成时间
* @param timeStamp
* @param pattern
* @return
*/
public static String timeStampToDate(Long timeStamp,String pattern){
return getSDF(pattern).format(timeStamp);
}
/**
* date转string
* @param date
* @param type
* @return
*/
public static String dateToString(Date date, String type) {
String str = null;
DateFormat format = getDF("yyyy-MM-dd");
if (type.equals("SHORT")) {
// 07-1-18
format = DateFormat.getDateInstance(DateFormat.SHORT);
str = format.format(date);
} else if (type.equals("MEDIUM")) {
// 2007-1-18
format = DateFormat.getDateInstance(DateFormat.MEDIUM);
str = format.format(date);
} else if (type.equals("FULL")) {
// 2007年1月18日 星期四
format = DateFormat.getDateInstance(DateFormat.FULL);
str = format.format(date);
}else if (type.equals("LONG")) {
// Date转化成 2017年11月1日
format = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINESE);
str = format.format(date);
}
return str;
}
/**
* string类型的时间转为日期格式
* Date是日期对象,并不是字符串。 当你打印Date对象时,java虚拟机默认调用了此对象的toString()方法。
* 此方法输出的国际标准日期格式。并不是说Date对象是这个格式。
* Date对象在保存日期时使用的是一个长整数。不存在哪种格式,只有输出到字符串时才有所谓的格式!
* @param string string类型的时间
* @param pattern 时间格式
* @return
* @throws ParseException
*/
public static Date stringToDate(String string, String pattern){
Date date = null;
try {
date = getSDF(pattern).parse(string);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* @return 获取当前年
*/
public static int getYear(){
return getCalendar().get(Calendar.YEAR);
}
/**
* @return 获取当前月
*/
public static int getMonth(){
return getCalendar().get(Calendar.MONTH)+1;
}
/**
* @return 获取当前日
*/
public static int getDay(){
return getCalendar().get(Calendar.DATE);
}
public static void main(String[] args) {
String str = "2018-12-24";
System.out.println(isValidDate(str, JAVA_Y_M_D_FORMAT));
System.out.println(getCurrDateTime());//获取yyyy-MM-dd HH:mm:ss格式的当前日期
System.out.println(getCurrTimetemp());//获取当前时间的时间戳
String sd =timeStampToDate(getCurrTimetemp(),JAVA_DEFAULT_FORMAT);//当前时间的时间戳转换成时间
System.out.println("格式化结果:" + sd);
String sd2 =timeStampToDate(1536643499744L,JAVA_DEFAULT_FORMAT);//某时间戳转换成时间
System.out.println("格式化结果:" + sd2);
System.out.println("stringToDate:"+stringToDate(str,JAVA_Y_M_D_FORMAT)); //打印时间对象
System.out.println(getCurrTimetemp(stringToDate(str,JAVA_Y_M_D_FORMAT)));//某日期转时间戳
String sd3 =timeStampToDate(getCurrTimetemp(stringToDate(str,JAVA_Y_M_D_FORMAT)),JAVA_Y_M_D_FORMAT);//某时间戳转换成时间
System.out.println("格式化结果:" + sd3);
//传入的year参数,应该为“目标年份”-1900,
//月份需要-1;
Date date1 = new Date(2018-1900,1-1,10);
System.out.println("当前时间是:"+date1.toLocaleString());
System.out.println(dateToString(date1, "MEDIUM"));//date转string
System.out.println(dateToString(date1, "LONG"));
System.out.println(getYear());
System.out.println(getMonth());
System.out.println(getDay());
}
}