您的位置:首页 > 其它

日期时间与字符串互相转换

2016-07-12 10:38 423 查看
/**

 * 

 * @ClassName: DateUtils 

 * @Description: TODO(日期时间与字符串互相转换 ) 

 * @author 刘霖晋

 * @date 2016年1月8日 下午6:08:23 

 *

 */

public class DateUtils {
/** 日期格式器--年 */
public static final String DATE_FORMAT_YEAR = "yyyy";
/** 日期格式器 */
public static final String DATE_FORMAT_MONTH = "yyyy-MM";
/** 日期格式器 */
public static final String DATE_FORMAT = "yyyy-MM-dd";
/** 日期格式器 */
public static final String DATE_FORMAT_NO_HYPHEN = "yyyyMMdd";
/** 时间格式器 */
public static final String TIME_FORMAT = "HH:mm:ss";
/** 日期时间格式器 */
public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/** 日期时间格式器-时分 */
public static final String DATETIME_FORMAT_HOUR_MINUTE_YEAR = "yyyy-MM-dd HH:mm";
/** 日期时间格式器-时分 */
public static final String DATETIME_FORMAT_HOUR_MINUTE = "HH:mm";
/** 日期时间格式器 */
public static final String DATETIME_FORMAT_1 = "yyyy-MM-dd 00:00:00";
/** 日期时间戳 */
public static final String DATETIME_STAMP = "yyyyMMddHHmmssSSS";
/** 日期时间戳 */
public static final String DATETIME_STAMP_NO_MS = "yyyyMMddHHmmss";
/** 时间戳 */
public static final String TIME_STAMP = "HHmmssSSS";
/** 秒*/
public static final int DATE_TYPE_SECOND = 0;
/** 分 */
public static final int DATE_TYPE_MINUTE= 1;
/** 时 */
public static final int DATE_TYPE_HOUR = 2;
/** 天 */
public static final int DATE_TYPE_DAY = 3;
/** 月 */
public static final int DATE_TYPE_MONTH = 4;
/** 年 */
public static final int DATE_TYPE_YEAR = 5;
/** 一年中所有的月份*/
public static final int MONTH_OF_YEAR = 12;

/** @category 将字符串解析成yyyy-MM-dd 的日期 */
public static Date parseDate(String value) {
try {
return new SimpleDateFormat(DATE_FORMAT, Locale.CHINA).parse(value);
} catch (ParseException e) {
return null;
}
}

/** @category 将字符串解析成HH:mm:ss的时间 */
public static Date parseTime(String value) {
try {
return new SimpleDateFormat(TIME_FORMAT, Locale.CHINA).parse(value);
} catch (ParseException e) {
return null;
}
}

/** @category 将字符串解析成yyyy-MM-dd HH:mm:ss的日期时间 */
public static Date parseDateTime(String value) {
try {
return new SimpleDateFormat(DATETIME_FORMAT, Locale.CHINA).parse(value);
} catch (ParseException e) {
return null;
}
}

/** @category 将字符串解析成yyyyMMddHHmmssSSS的日期时间 */
public static Date parseDateTimeStamp(String value) {
try {
return new SimpleDateFormat(DATETIME_STAMP, Locale.CHINA).parse(value);
} catch (ParseException e) {
return null;
}
}

/** @category 将时间解析成yyyy-MM-dd的字符串 */
public static String formatDate(Date date,boolean isHyphen) {
if(isHyphen){
return new SimpleDateFormat(DATE_FORMAT, Locale.CHINA).format(date);
}else{
return new SimpleDateFormat(DATE_FORMAT_NO_HYPHEN, Locale.CHINA).format(date);
}
}

/** @category 将时间解析成yyyy的字符串 */
public static String formatDateToYear(Date date) {
return new SimpleDateFormat(DATE_FORMAT_YEAR, Locale.CHINA).format(date);
}

/** @category 将日期解析成HH:mm:ss的字符串 */
public static String formatTime(Date date) {
return new SimpleDateFormat(TIME_FORMAT, Locale.CHINA).format(date);
}

/** @category 将日期时间解析成yyyy-MM-dd HH:mm:ss的字符串 */
public static String formatDateTime(Date date) {
return new SimpleDateFormat(DATETIME_FORMAT, Locale.CHINA).format(date);
}

/** @category 将日期时间解析成yyyy-MM-dd HH:mm:ss的字符串 */
public static String formatCurrentDateTime() {
return new SimpleDateFormat(DATETIME_FORMAT, Locale.CHINA).format(new Date());
}

/** @category 将日期解析成yyyyMMddHHmmssSSS的字符串 */
public static String formatDateTimestamp(Date date) {
return new SimpleDateFormat(DATETIME_STAMP, Locale.CHINA).format(date);
}

/** @category 将日期解析成yyyyMMddHHmmss的字符串 */
public static String formatDateTimestampNoMs(Date date) {
return
4000
new SimpleDateFormat(DATETIME_STAMP_NO_MS, Locale.CHINA).format(date);
}

/** @category 将日期解析成HHmmssSSS的字符串 */
public static String formatTimestamp(Date date) {
return new SimpleDateFormat(TIME_STAMP, Locale.CHINA).format(date);
}

/**
* @return
* @category 获取当年天数
*/
public static int getDaysInYear() {
GregorianCalendar calendar = new GregorianCalendar();
return calendar.isLeapYear(calendar.get(Calendar.YEAR)) ? 366 : 365;
}

/**
* @return date型时间
* @throws Exception
* @category 格式化当前日期
* @author frank
* @Created 2012-10-11  下午2:42:55
*/
public static Date getSysDateOfDate() throws Exception {
// 获取时间 并转换格式
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(DATETIME_FORMAT, Locale.CHINA);
return formatter.parse(formatter.format(date));
}

/**
* @param calendarType Calendar.DATE、Calendar.MONTH、Calendar.YEAR等
* @param num          对应日期类型对应的数量
* @return 指定date型时间
* @throws Exception
* @category 获取指定日期并格式化日期。比如:离现在30天前的日期、获取上个月日期
*/
public static Date getDefineDate(int calendarType, int num) {
Calendar cal = Calendar.getInstance();
cal.add(calendarType, num);
SimpleDateFormat formatter = new SimpleDateFormat(DATETIME_FORMAT_1);
try {
return formatter.parse(formatter.format(cal.getTime()));
} catch (ParseException e) {
return null;
}
}

/**
* @param SpecifiedDate 指定的时间,即需要比较的时间
* @param largeDate     到期的时间,即比较大的时间
* @return 天数差
* @category 计算指定时间与当前时间的天数差
*/
public static int getDaysDifference(Date SpecifiedDate, Date largeDate) {
Calendar cNow = Calendar.getInstance();
Calendar cReturnDate = Calendar.getInstance();
cNow.setTime(largeDate);
cReturnDate.setTime(SpecifiedDate);
setTimeToMidnight(cNow);
setTimeToMidnight(cReturnDate);
long todayMs = cNow.getTimeInMillis();
long returnMs = cReturnDate.getTimeInMillis();
long intervalMs = todayMs - returnMs;
return (int) (intervalMs / (1000 * 86400));
}

private static void setTimeToMidnight(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
}

/**  

     * @param referenceDate 需要比较的时间 不能为空(null),需要正确的日期格式  

     * @param date 被比较的时间  为空(null)则为当前时间  

     * @param stype 返回值类型   0为多少天,1为多少个月,2为多少年  

     * @return  
* @throws ParseException 

     */ 
public static int compareDate(String referenceDate , String date, int stype) throws ParseException {
int n = 0;
String formatStyle = stype == 1 ? DATE_FORMAT_MONTH : DATE_FORMAT;

date = date == null ? formatDate(new Date(),true) : date;

DateFormat df = new SimpleDateFormat(formatStyle);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(df.parse(referenceDate));
c2.setTime(df.parse(date));

while (!c1.after(c2)) { // 循环对比,直到相等,n 就是所要的结果
n++;
if (stype == 1) {
c1.add(Calendar.MONTH, 1); // 比较月份,月份+1
} else if(stype == 0) {
c1.add(Calendar.DATE, 1); // 比较天数,日期+1
}
}

n = n - 1;

if (stype == 2) {
n = (int) n / 365;
}

return n;
}

/**
* @Title: compareDate
* @Description: 比较两个时间的大小
* @param date1 时间1
* @param date2 时间2
* @return -1:时间1比时间2小,1:时间1比时间2大
* @throws Throwable
*/
public static int compareDate(String date1 , String date2) throws ParseException{

date2 = date2 == null ? formatDateTime(new Date()) : date2;

DateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();

c1.setTime(df.parse(date1));
c2.setTime(df.parse(date2));

return c1.compareTo(c2);
}

/**
* @Title: addtime
* @Description: 增加时间
* @param date 需要被增加的时间
* @param stype 0:表示秒,1表示分,2表示时,3表示天,4表示月,5表示年
*/
public static String addtime(String date,int addNum,int stype) throws ParseException{

date = date == null ? formatDateTime(new Date()) : date;

DateFormat df = new SimpleDateFormat(DATETIME_FORMAT);
Calendar c1 = Calendar.getInstance();
c1.setTime(df.parse(date));

switch(stype){
case 0 : c1.add(Calendar.SECOND, addNum); break; // 秒    
case 1 : c1.add(Calendar.MINUTE, addNum); break;// 分    
case 2 : c1.add(Calendar.HOUR, addNum); break;// 时    
case 3 : c1.add(Calendar.DATE, addNum); break;// 天    
case 4 : c1.add(Calendar.MONTH, addNum); break;// 月份
case 5 : c1.add(Calendar.YEAR, addNum); break;// 年份
default : ;
}
return formatDateTime(c1.getTime());
}

/**
* @category 获取当前时间之前/之后多少年/月/日的时间
* @param format 日期格式
* @param variable 正数代表时间之后,负数代表时间之前
* @param field 单位,年,月,日
* @return
*/
public static String getDiffDate(String format,int variable,int field) {
Calendar c = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
c.set(field, variable);
return formatter.format(c.getTime());
}

/**
* @Title: addTime
* @Description: 指定格式,给当前时间增加多少个月的时间
* @param format 指定格式
* @param field 日历类型
* @param amount 需要增加的数值
* @return
* @throws ParseException
*/
public static String addTime(String format, int field, int amount) throws ParseException {
Calendar c = Calendar.getInstance();
c.setTime(new Date());
c.add(field, amount);
return new SimpleDateFormat(format).format(c.getTime());
}

/**
* @Title: comparePublishLoanSignTime
* @Description: 获取当前时间与指定时间的相距的秒数
* @param date 指定时间
* @return 秒数(如果返回负值,表示当前时间已经超过了指定时间)
* @throws ParseException
*/
public static long comparePublishLoanSignTime(String date,boolean secondDay) throws Throwable{
SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT_HOUR_MINUTE);
SimpleDateFormat sdf2 = new SimpleDateFormat(DATE_FORMAT, Locale.CHINA);
SimpleDateFormat sdf3 = new SimpleDateFormat(DATETIME_FORMAT_HOUR_MINUTE_YEAR);

StringBuilder builder = new StringBuilder();

String currentDate = sdf2.format(new Date());

String currentMinuteSecond = sdf.format(new Date());

builder.append(currentDate).append(" ").append(currentMinuteSecond);

long currentTime = sdf3.parse(builder.toString()).getTime();
builder.setLength(0);

if(secondDay){
Calendar c1 = Calendar.getInstance();
c1.setTime(sdf2.parse(currentDate));

c1.add(Calendar.DATE, 1);

currentDate = sdf2.format(c1.getTime());
}

builder.append(currentDate).append(" ").append(date);

long sourceTime = sdf3.parse(builder.toString()).getTime();

return (sourceTime - currentTime) / 1000;

}

/**
* @Title: getDateDiff
* @Description: 获取当前日期与传入的日期差值
* @param date 传入的日期
* @return 差值
* @throws Throwable
*/
public static long getDateDiff(String date) throws Throwable{
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);

//一天的毫秒数
long nd = 1000*24*60*60;

//获得两个时间的毫秒时间差异

long paraDateTime = sdf.parse(date).getTime();

long currentTime = sdf.parse(sdf.format(new Date())).getTime();

return (currentTime - paraDateTime)/nd;

}

/**
* @Title: getDateDiffMinute
* @Description: 获取两个时间的相差的分钟数
* @param date1
时间1(格式:yyyy-MM-dd HH:mm:ss)
* @param date2
时间2(格式:yyyy-MM-dd HH:mm:ss),如果时间2为空,则默认为当前时间
* @return
相差的分钟数
* @throws Throwable
*/
public static long getDateDiffMinute(String date1,String date2) throws Throwable{
date2 = date2 == null ? formatCurrentDateTime() : date2;

SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT);

//一分钟的毫秒数
long nd = 1000*60;

//获得两个时间的毫秒时间差异

long paraDateTime = sdf.parse(date1).getTime();

long currentTime = sdf.parse(date2).getTime();

return (currentTime - paraDateTime)/nd;
}

/**
* @throws Exception 

* @Title: getTwoDateDay 
* @Description: TODO(获取两时间直接天数) 
* @param @return    设定文件 
* @return Object    返回类型 
* llj
* @throws
*/
public static Object getTwoDateDay(String date1,String date2) throws Exception {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long l_date1=sdf.parse(date1).getTime();
long l_date2=sdf.parse(date2).getTime();
int dayCount=(int)((l_date2-l_date1)/(1000*60*60*24));
return dayCount;
}

/**

* @Title: getNewDateTime 
* @Description: TODO(llj 获取当前时间) 
* @param @return    设定文件 
* @return Object    返回类型 
* @throws
*/
public static String getNewDateTime() {
Date now = new Date(); 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now ); 
return hehe;
}

/**

* @Title: getWeekOfDate 
* @Description: TODO(获取当前星期) 
* @param @param dt
* @param @return    设定文件 
* @return String    返回类型 
* @throws
*/
public static String getWeekOfDate(Date dt) {

        String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"};

        Calendar cal = Calendar.getInstance();

        cal.setTime(dt);

        int w = cal.get(Calendar.DAY_OF_WEEK) - 1;

        if (w < 0)

            w = 0;

        return weekDays[w];

    }

/**
* 算出日期多少日期前
* @param date
* @return
* @throws ParseException
*/
public static String getDataFormat(Date date)  throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date now = df.parse(df.format(new Date()));
date=df.parse(df.format(date));
long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000); //天
long hour=(l/(60*60*1000)-day*24); //小时
long min=((l/(60*1000))-day*24*60-hour*60); //分
long s=(l/1000-day*24*60*60-hour*60*60-min*60); //秒
//System.out.println(day+"天"+hour+"时"+min+"分"+s+"秒");
if(day>0 && day<4){
if(day==1){
return "一天前";
}else if(day==2){
return "两天前";
}else{
return "三天前";
}
}else if(day>3){
return sdf.format(date);
}else{
if(hour>0){
return hour+"小时前";
}else{
if(min>0){
return min+"分钟前";
}else{
return s+"秒钟前";
}
}
}
}

/**
* @Title: getTimeDistance
* @Description: 获取一个时间距离当前时间多少天,或多少时,或多少分钟,或多少秒

* @param time 格式 yyyy-MM-dd HH:mm:ss 的时间字符串 
* @return 当间隔是天时,返回【多少天前】;当间隔是小时时,返回【多少时前】;当间隔是分钟时,返回【多少分钟前】;当间隔是秒时,返回【多少秒钟前】
* @throws ParseException 
*/
public static String getTimeDistance(String time){

try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(time);
Date now = df.parse(df.format(new Date()));
date=df.parse(df.format(date));

long l=now.getTime()-date.getTime();
long day=l/(24*60*60*1000); //天
long hour=(l/(60*60*1000)-day*24); //小时
long min=((l/(60*1000))-day*24*60-hour*60); //分
long s=(l/1000-day*24*60*60-hour*60*60-min*60); //秒

if(day > 0){
return day + "天前";
}

if(hour > 0){
return hour+"小时前";
}

if(min > 0){
return min+"分前";
}

return s+"秒钟前";
} catch (ParseException e) {
e.printStackTrace();
}

return "";

}

public static void main(String[] args)throws Throwable {
System.out.println(getTimeDistance("2016-03-11 12:02:36"));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: