package com.njwxb.swapp.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import com.njwxb.swapp.log.LogFactory;
import com.njwxb.swapp.log.Runlog;
public abstract class DateUtil
{
private static Runlog runLog = LogFactory.getRunlog();
private static String sdf14 = "yyyyMMddHHmmss";
private static String sdf17 = "yyyyMMddHHmmssSSS";
private static String sdfhuman = "yyyy-MM-dd HH:mm:ss";
private static String sdfcn = "yyyy年MM月dd日 HH:mm";
private static String sdfymd = "yyyy-MM-dd";
private static String sdfcn8 = "yyyy年MM月dd日";
public static String getCurrentTime14()
{
SimpleDateFormat sdf14Format = new SimpleDateFormat(sdf14);
return sdf14Format.format(new Date());
}
public static String getCurrentTime17()
{
SimpleDateFormat sdf17Format = new SimpleDateFormat(sdf17);
return sdf17Format.format(new Date());
}
public static String getCurrentTimeHuman()
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
return sdfhumanFormat.format(new Date());
}
public static String getCurrentCnTime()
{
SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
return sdfcnFormat.format(new Date());
}
public static String formateCurrentCnTime(Calendar calendar)
{
SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
return sdfcnFormat.format(calendar.getTime());
}
public static String formateTimeFromSdfhumanToSdfymd(String dateStr)
{
try
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
return sdfymdFormat.format(sdfhumanFormat.parse(dateStr));
}
catch (ParseException e)
{
return formateCurrentCnTime(Calendar.getInstance());
}
}
public static String formateCurrentCnTime(String dateStr)
{
try
{
SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
return sdfcnFormat.format(sdfcnFormat.parse(dateStr));
}
catch (ParseException e)
{
return formateCurrentCnTime(Calendar.getInstance());
}
}
public static String formateCurrentHumanTime(String dateStr)
{
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
SimpleDateFormat sdfcnFormat = new SimpleDateFormat(sdfcn);
return sdfcnFormat.format(sdfhumanFormat.parse(dateStr));
}
catch (ParseException e)
{
return formateCurrentCnTime(Calendar.getInstance());
}
}
public static String getCurrentYearMonthDay()
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
return sdfymdFormat.format(new Date());
}
public static String addsdfymdYear(String datestr, int step)
{
try
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
Date date = sdfymdFormat.parse(datestr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, step);
return sdfymdFormat.format(calendar.getTime());
}
catch (ParseException e)
{
runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
}
return null;
}
public static String addsdfymdDay(String datestr, int step)
{
try
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
Date date = sdfymdFormat.parse(datestr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, step);
return sdfymdFormat.format(calendar.getTime());
}
catch (ParseException e)
{
runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
}
return null;
}
public static long getDaySub(String datestr1, String datestr2)
{
if (runLog.isDebugEnabled())
{
runLog.debug("inMethod getDaySub", "datestr1", datestr1, "datestr2", datestr2);
}
long day = 0;
try
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
Date beginDate = sdfymdFormat.parse(datestr2);
Date endDate = sdfymdFormat.parse(datestr1);
day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
}
catch (ParseException e)
{
runLog.error("getDaySub error!datestr1=" + datestr1 + "datestr1" + datestr1, e);
}
if (runLog.isDebugEnabled())
{
runLog.debug("outMethod getDaySub", "day", day);
}
return day;
}
public static long getHumanMinSub(String datestr1, String datestr2)
{
long day = 0;
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
Date beginDate = sdfhumanFormat.parse(datestr2);
Date endDate = sdfhumanFormat.parse(datestr1);
day = (endDate.getTime() - beginDate.getTime()) / (60 * 1000);
}
catch (ParseException e)
{
runLog.error("getDaySub error!datestr1=" + datestr1 + "datestr1" + datestr1, e);
}
return day;
}
public static boolean compareToData(String data1, String data2)
{
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
Date a = sdfhumanFormat.parse(data1);
Date b = sdfhumanFormat.parse(data2);
if (a.getTime() - b.getTime() > 0)
{
return true;
}
}
catch (Exception e)
{
runLog.error("compare date error!data1=" + data1 + "data2=" + data2, e);
}
return false;
}
public static boolean compareToData2(String data1, String data2)
{
try
{
SimpleDateFormat sdfymdFormat = new SimpleDateFormat(sdfymd);
Date a = sdfymdFormat.parse(data1);
Date b = sdfymdFormat.parse(data2);
if (a.getTime() - b.getTime() >= 0)
{
return true;
}
}
catch (Exception e)
{
runLog.error("compare date error!data1=" + data1 + "data2=" + data2, e);
}
return false;
}
public static String getSystemCurrData()
{
Date date = new Date();
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
return sdfhumanFormat.format(date);
}
public static String addDay(String datestr, int step)
{
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
Date date = sdfhumanFormat.parse(datestr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, step);
return sdfhumanFormat.format(calendar.getTime());
}
catch (ParseException e)
{
runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
}
return null;
}
public static String addMonth(String datestr, int step)
{
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
Date date = sdfhumanFormat.parse(datestr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, step);
return sdfhumanFormat.format(calendar.getTime());
}
catch (ParseException e)
{
runLog.error("add day error!datestr=" + datestr + "step=" + step, e);
}
return null;
}
public static boolean dateIsToday(String datestr)
{
try
{
Date curDate = new Date();
SimpleDateFormat simpFormat = new SimpleDateFormat(sdfymd);
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
String curDateStr = simpFormat.format(curDate);
Date date = sdfhumanFormat.parse(datestr);
Date startDate = sdfhumanFormat.parse(curDateStr + " 00:00:00");
Date endDate = sdfhumanFormat.parse(curDateStr + " 23:59:59");
if (date.getTime() <= endDate.getTime() && date.getTime() >= startDate.getTime())
{
return true;
}
}
catch (ParseException e)
{
runLog.error("parse datestr fail! datestr=" + datestr, e);
}
return false;
}
public static boolean isHumanFormat(String datestr)
{
boolean isHuman = false;
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
Date date = sdfhumanFormat.parse(datestr);
String tmp = sdfhumanFormat.format(date);
isHuman = datestr.equals(tmp);
}
catch (ParseException e)
{
runLog.error("add day error!datestr=", "isHuman", isHuman, e);
}
return isHuman;
}
public static String getYesterdayZero(int day)
{
try
{
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, day);
SimpleDateFormat simpFormat = new SimpleDateFormat(sdfcn8);
String timeStr = simpFormat.format(calendar.getTime()) + "00:00";
return timeStr;
}
catch (Exception e)
{
runLog.error("parse datestr fail!", e);
}
return null;
}
public static String getMondayOfDate(String datestr)
{
Date date = null;
//周日到周一为0-6
Integer week = null;
//周一的日期
String monday = null;
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
date = sdfhumanFormat.parse(datestr);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
week = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (week < 0)
{
week = 0;
}
if (week > 0)
{
monday = addDay(datestr, -(week - 1));
}
else
{
monday = addDay(datestr, -6);
}
}
catch (Exception e)
{
runLog.error("parse datestr fail!", e);
}
return monday;
}
public static String getMonthFirstOrLastDay(String datestr, String flag)
{
Date date = null;
String day = null;
try
{
SimpleDateFormat sdfhumanFormat = new SimpleDateFormat(sdfhuman);
date = sdfhumanFormat.parse(datestr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 设置日期为本月最大日期
if ("first".equals(flag))
{
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DATE));
}
else if ("last".equals(flag))
{
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
}
day = sdfhumanFormat.format(calendar.getTime());
}
catch (Exception e)
{
runLog.error("parse datestr fail!", e);
}
return day;
}
public static String getDayOfMonth(Integer year, Integer month, String flag)
{
Calendar cal = Calendar.getInstance();
//设置年份
if (year != null)
{
cal.set(Calendar.YEAR, year);
}
else
{
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR));
}
//设置月份
if (month != null)
{
cal.set(Calendar.MONTH, month - 1);
}
else
{
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH));
}
//获取某月最大或最小天数天数
if ("first".equals(flag))
{
cal.set(Calendar.DATE, cal.getActualMinimum(Calendar.DATE));
}
else if ("last".equals(flag))
{
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
}
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat(sdfymd);
String day = sdf.format(cal.getTime());
return day;
}
}