第二篇:https://blog.csdn.net/weixin_44316854/article/details/89521921
package com.ai.trial.common.util;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import com.ai.trial.ct.util.NumberFormatUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import com.ai.trial.ct.util.MatchUtil;
/**
* @Description: 日期工具類
*/
public class DateUtil {
private static final Logger logger=Logger.getLogger(DateUtil.class);
static char[] numArray = { '〇', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
/**
* 描述: 将數字原樣轉為大寫
* @return java.lang.String
**/
public static String formatNmber(int num){
try {
StringBuffer sbu = new StringBuffer();
char[] val = String.valueOf(num).toCharArray();
for (int i = 0; i < val.length; i++) {
int i1 = Integer.parseInt(val[i] + "");
sbu.append(numArray[i1]);
}
return sbu.toString();
}catch (Exception e){
logger.error(e.getMessage(),e);
return "";
}
}
/**
*
* @Description: 格式化日期格式和資料庫格式一緻
* @param date
* @return
*/
public static Date formatDateToSqlDate(Date date) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatDateStr =formatter.format(date);
Date fDate = null;
try {
fDate = formatter.parse(formatDateStr);
} catch (ParseException e) {
logger.error(e.getMessage(),e);
}
return fDate;
}
/**
*
* @Description 給定的時間加指定的月份
*/
public static String dateAddMonth(String date,int month){
try{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-M-d");
Date d = formatter.parse(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
calendar.add(Calendar.MONTH,month);
String dateStr = formatter.format(calendar.getTime());
return dateStr;
}catch(Exception e){
logger.error(e.getMessage(),e);
return "";
}
}
/**
*
* @Description 格式化時間
*/
public static String formatDate(Date date,String format){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
return simpleDateFormat.format(date);
}
/**
*
* @Description 擷取大寫的時間(二)
*/
public static String getDateOfCH(Date date){
StringBuilder sb = new StringBuilder();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
char[] year = (calendar.get(Calendar.YEAR)+"").toCharArray();
int month = calendar.get(Calendar.MONTH)+1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
for (int i = 0; i < year.length; i++) {
String num = String.valueOf(year[i]);
sb.append(formatNmber(Integer.parseInt(num)));
}
sb.append("年"+month+"月"+day+"日");
return NumberFormatUtils.changeNumber(sb.toString());
}
/**
*
* @Description 輸入月數,傳回年月
*/
public static String getResultByMonth(int months){
int year = months/12;
int month = months%12;
return year+"年"+month+"月";
}
/**
* 描述: 根據**年**月傳回總月份
* @Param [result]
* @return int
**/
public static int getMonthByResult(String result){
int months = 0;
try {
int yearIndex = 0;
int year = 0;
if(result.contains("年")){
yearIndex = result.indexOf("年");
year = Integer.valueOf(result.substring(0,yearIndex));
}
int month = 0;
if(result.contains("月")){
month = Integer.valueOf(result.substring(yearIndex+1,result.length()-1));
}
System.out.println(month);
months = year*12+month;
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
return months;
}
/**
* 将**年**月轉為月份傳回
* @param result
* @return
*/
public static int getMonthResult(String result){
int months = 0;
try {
int year = 0;
int month = 0;
if(!MatchUtil.isEmpty(result) && result.contains("年")){
year = Integer.valueOf(StringUtils.substringBefore(result,"年"));
if(result.contains("月")){
month = Integer.valueOf(StringUtils.substringBetween(result, "年", "月"));
}
}
months = year*12+month;
} catch (Exception e) {
logger.error(e.getMessage(),e);
return months;
}
return months;
}
public static void main(String[] args) {
String result = "10年";
System.out.println(getMonthByResult(result));
SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = sim.parse("2017-09-09");
String dateOfCH = getDateOfCH(parse);
System.err.print(dateOfCH);
} catch (Exception e){
}
}
/**
* 根據傳入的日期字元串轉換成相應的日期對象,如果字元串為空或不符合日期格
* 式,則傳回目前時間。
* @param strDate String 日期字元串
* @return java.util.Date 日期對象
* */
public static Date getDateFromString(String strDate,String format)
{
if (StringUtils.isEmpty(strDate))
{
return new Date(System.currentTimeMillis());
}
try
{
SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat(format);
return sdfLongTimePlus.parse(strDate);
}
catch (Exception ex)
{
return new Timestamp(System.currentTimeMillis());
}
}
/**
* @Title: 按着自然月日年擷取前你你月的具體時間
* @Description: TODO()
* @param @param num
* @param @return
* @return String yyyy-MM-dd
* @throws
*/
public static String getNatureDateStart(int timeType,int num){
String timeStr = "";
try {
Calendar calo = Calendar.getInstance();
Date date = calo.getTime();
if(timeType == 0){
SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-01-01 00:00:00");
date = DateUtil.getDateFromString(thismonthFormat.format(date));
calo.setTime(date);
calo.add(Calendar.YEAR, -num+1);
}else if(timeType == 1){
SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-MM-01 00:00:00");
date = DateUtil.getDateFromString(thismonthFormat.format(date));
calo.setTime(date);
calo.add(Calendar.MONTH, -num+1);
}else if(timeType == 2){
calo = getCurrentMonday();
calo.add(Calendar.DAY_OF_WEEK, -num*7);
}else if(timeType == 3){
SimpleDateFormat thismonthFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
date = DateUtil.getDateFromString(thismonthFormat.format(date));
calo.setTime(date);
calo.add(Calendar.DAY_OF_WEEK, -num+1);
}
timeStr = DateUtil.getPlusTime(calo.getTime());
} catch (Exception e) {
System.out.println(" ERROR");
logger.error(e.getMessage(),e);
}
return timeStr;
}
// (2) 獲得本周星期一的日期
public static Calendar getCurrentMonday()
{
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
Calendar c = Calendar.getInstance();
c.setTime(monday);
return c;
}
// (1)獲得目前日期與本周一相差的天數
private static int getMondayPlus()
{
Calendar cd = Calendar.getInstance();
// 獲得今天是一周的第幾天,星期日是第一天,星期二是第二天......
int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1)
{
return -6;
}
else
{
return 2 - dayOfWeek;
}
}
/**
* Descrption:取得目前日期,格式為:yyyy-MM-dd HH:mm:ss
* @return String
* @throws Exception
*/
public static String getPlusTime(Date date) throws Exception{
if(date == null ){
return null;
}
try
{
SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String nowDate = sdfLongTimePlus.format(date);
return nowDate;
}
catch (Exception e)
{
throw e;
}
}
/**
* 根據傳入的日期字元串轉換成相應的日期對象,如果字元串為空或不符合日期格
* 式,則傳回目前時間。
* @param strDate String 日期字元串
* @return java.util.Date 日期對象
* */
public static Date getDateFromString(String strDate)
{
if (StringUtils.isEmpty(strDate))
{
return new Date(System.currentTimeMillis());
}
try
{
SimpleDateFormat sdfLongTimePlus = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdfLongTimePlus.parse(strDate);
}
catch (Exception ex)
{
return new Timestamp(System.currentTimeMillis());
}
}
/**
* 計算兩個日期之間相差的天數
* @param smdate 較小的時間
* @param bdate 較大的時間
* @return 相差天數
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdf.parse(sdf.format(smdate));
bdate=sdf.parse(sdf.format(bdate));
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
* 處理時間日期類型問題
* @param startTimeStr
* @param endTimeStr
* @param timeType
* @return
*/
public static Map<String,Object> getQueryPatameter(String startTimeStr, String endTimeStr, String timeType){
Map<String,Object> param =new HashMap<>();
Date nowDate = new Date();
Date endDate = null;
Date startDate = null;
if(org.springframework.util.StringUtils.hasText(startTimeStr) && org.springframework.util.StringUtils.hasText(endTimeStr)){
startDate = DateUtil.getDateFromString(startTimeStr,"yyyy-MM-dd");
endDate = DateUtil.getDateFromString(endTimeStr,"yyyy-MM-dd");
} else if (org.springframework.util.StringUtils.hasText(timeType)){
Calendar calendar = Calendar.getInstance();
calendar.setTime(nowDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MINUTE,0);
endDate = calendar.getTime();
if("oneM".equals(timeType)){
calendar.setTime(endDate);
calendar.add(Calendar.DATE, -30);
startDate = calendar.getTime();
}else if("twoM".equals(timeType)){
calendar.setTime(endDate);
calendar.add(Calendar.DATE, -60);
startDate = calendar.getTime();
}else if("oneY".equals(timeType)){
calendar.setTime(endDate);
calendar.add(Calendar.YEAR, -1);
startDate = calendar.getTime();
}
}
param.put("startDate", startDate);
param.put("endDate", endDate);
return param;
}
}