`
hanjava
  • 浏览: 31155 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

java常用Utils整理

阅读更多
package com.service_im.spoon.util;

import java.io.File;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

public class Utils {

/**
* 日期转换格式:yyyy-MM-dd HH:mm:ss
*/
private static final SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**
*  日期转换格式:yyyy-MM-dd
*/
private static final SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");

/**
*  日期转换格式:yyyy-MM-dd HH:mm
*/
private static final SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd HH:mm");


/**
* 加减日期
* @param date
* @param days
* @return
*/
public static String getAddDate(String date, int days) {
Calendar calendar = Calendar.getInstance();
String[] calen = date.split("-");
int year = Integer.parseInt(calen[0]);
int month = Integer.parseInt(calen[1]);
int day = Integer.parseInt(calen[2]);
calendar.set(year, month - 1, day);
calendar.add(Calendar.DAY_OF_MONTH, days);
return Utils.getDate(calendar.get(Calendar.YEAR)) + "-" + Utils.getDate(calendar.get(Calendar.MONTH) + 1) + "-" + Utils.getDate(calendar.get(Calendar.DAY_OF_MONTH));
}

public static String getDate(int i) {
return i < 10 ? "0" + i : i + "";
}

//获取日期的月初
  public static Date getMonthStart(Date date) {
          Calendar calendar = Calendar.getInstance();
          calendar.setTime(date);
          int index = calendar.get(Calendar.DAY_OF_MONTH);
          calendar.add(Calendar.DATE, (1 - index));
          return calendar.getTime();
      }
  
  //获取日期的月末
  public static Date getMonthEnd(Date date) {
          Calendar calendar = Calendar.getInstance();
          calendar.setTime(date);
          calendar.add(Calendar.MONTH, 1);
          int index = calendar.get(Calendar.DAY_OF_MONTH);
          calendar.add(Calendar.DATE, (-index));
          return calendar.getTime();
      }
 
  //获取日期的下个月
  public static Date getNext(Date date) {
          Calendar calendar = Calendar.getInstance();
          calendar.setTime(date);
          calendar.add(Calendar.DATE, 1);
          return calendar.getTime();
      }
 
  /**
* 判断字符串是否为空
* @param str
* @return
*/
public static boolean isNullCharacter(String str){
boolean flg = false;
if(null != str && !"".equals(str.trim())){
flg = true;
}
return flg;
}

/**
* 生成随机数
* @param length
* @return
*/
public static String getRandomNumberMessage(int length){
Random r = new Random();
String ssource = "123456789";
char[] src = ssource.toCharArray();
char[] buf = new char[length];
int rnd;
for(int i=0;i<length;i++){
rnd = Math.abs(r.nextInt()) % src.length;
buf[i] = src[rnd];
}           
return new String(buf);
}

    /**
     * 生成支付订单编号
     * @return
     */ 
    public static synchronized String getPayOrderNo() { 
        String strOrderNo = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        return "PO"+strOrderNo; 
    }
   
    /**
     * 传输的时间与当前时间进行比较,算出相差多少小时
     * 当前时间减去传送时间
     * @return
     */ 
    public static synchronized long getDateDifferHours1(String strBegin) { 
        SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long hour=0;
try {
Date begin = dfs.parse(strBegin);
Date end = new Date();
long diff=end.getTime()-begin.getTime();
hour=diff / (60 * 60 * 1000);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return hour;
    }
   
    /**
     * 传输的时间与当前时间进行比较,算出相差多少小时
     * 传送时间减去当前时间
     * @return
     */ 
    public static synchronized long getDateDifferHours2(String strBegin) { 
        SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long hour=0;
try {
Date begin = dfs.parse(strBegin);
Date end = new Date();
long diff=begin.getTime()-end.getTime();
hour=diff / (60 * 60 * 1000);
} catch (ParseException e) {
e.printStackTrace();
}
return hour;
    }
   
    /**
     * 传输的时间与当前时间进行比较,算出相差多少分钟
     * 传送时间减去当前时间
     * @return
     */ 
    public static synchronized long getDateDifferMinute2(String strBegin) { 
        SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long min = 0;
try {
Date begin = dfs.parse(strBegin);
Date end = new Date();
long time1 = begin.getTime(); 
long time2 = end.getTime();
long diff = time1 - time2; 
min = diff / (60 * 1000); 
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return min;
    }
   
    /**
     * 传输的时间与当前时间进行比较,算出相差多少分钟
     * 当前时间减去传送时间
     * @return
     */ 
    public static synchronized long getDateDifferMinute1(String strBegin) { 
        SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long min = 0;
try {
Date begin = dfs.parse(strBegin);
Date end = new Date();
long time1 = begin.getTime(); 
long time2 = end.getTime();
long diff = time2 - time1; 
min = diff / (60 * 1000); 
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return min;
    }
   
    /**
     * 字符串是否为数字
     * @param str
     * @return
     */
public static boolean isNumeric(String str) {
for (int i = 0; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}

/**
* 将null,"null"这种字符串进行转义
* @param str
* @return
*/
public static String replaceStringNULL(String str){
if(str==null){
return "";
}else if(("\"null\"".equals(str.trim()))||("\"\"".equals(str.trim()))){
return str.replace("\"", "");
}

return str;
}

/**
* 年增加方法
* @param s
* @param n
* @return
*/
    public static String addYear(String s, int n) {  
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar cd = Calendar.getInstance();
cd.setTime(sdf.parse(s));
//cd.add(Calendar.DATE, n);// 增加一天
// cd.add(Calendar.MONTH, n);//增加一个月
cd.add(Calendar.YEAR, n);
return sdf.format(cd.getTime());
} catch (Exception e) {
return null;
}
     }
   
/**
* 日期上面进行小时增加
* @param date
* @param days
* @return
*/
public static String getDateAddHours(String strDate, int days) {
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date=null;
try {
date = sdf.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar ca=Calendar.getInstance();
ca.setTime(date);
ca.add(Calendar.HOUR_OF_DAY, days);
return sdf.format(ca.getTime());
}

/**
* 将字符串中的特殊字符转进行转义
* @param s
* @return
*/
public static String stringToJson(String s){
StringBuffer sb = new StringBuffer();
for(int i=0; i<s.length();i++){
char c = s.charAt(i);
switch(c){
//case '\"':
//sb.append("\\\"");
//break;
//case '\\': //如果不处理单引号,可以释放此段代码,若结合下面的方法处理单引号就必须注释掉该段代码
//sb.append("\\\\");
// break;
case '/':
sb.append("\\/");
break;
case '\b': //退格
sb.append("\\b");
break;
case '\f': //走纸换页
sb.append("\\f");
break;
case '\n':
sb.append("\\n"); //换行
break;
case '\r': //回车
sb.append("\\r");
break;
case '\t': //横向跳格
sb.append("\\t");
break;
default:
sb.append(c);
}
}
return sb.toString();
}

/**
* 根据月份获得天数
* @param month 月份
* @param year 年份
* @return
*/
public static int getDayNumberByMonth(int month,int year){
int day=0;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
case 2:
boolean b=isLeapYear(year);
if(b){
day=29;
}else{
day=28;
}
break;
case 4:
case 6:
case 9:
case 11:
day=30;
break;
}
return day;
}

/**
* 判断是否闰年还平年
* 一个年份数可以被100整除的话,如果同时也可以被4整除才是闰年,否则的是平年。
*一个年份数不能被100整除的话,如果ta此时可以被4整除也是闰年,否则的是平年。
* @param year 年份
* @return
*/
public static boolean isLeapYear(int year){
if((year%100) ==0){
if((year%400)==0){
return true;
}
}else{
if((year%4)==0){
return true;
}
}
return false;
}

/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str) {
 
   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Date date = null;
   try {
    date = format.parse(str);
   } catch (ParseException e) {
    e.printStackTrace();
   }
   return date;
}

/**
* 将价格转换为小数位,保留2位
* @param orderMoney
* @return
*/
public static String getTrunDecimals(String orderMoney){
DecimalFormat df = new DecimalFormat("0.00"); // 保留2位小数
double price = Double.parseDouble(orderMoney);
// String strPrice = df.format(price);
return df.format(price);
}

/**
* 将时间转换成字符串格式
* @param date Date类型
* @param format 字符串,须转换的格式,
* 参数可为:
* format1:表示yyyy-MM-dd HH:mm:ss
* format2:yyyy-MM-dd
* @return String
*/
public static String dateTostr(Date date,String format) {
String str = "";
try {
if("format1".equals(format)){
format1.setLenient(false);
str = format1.format(date);
}else if("format2".equals(format)){
format2.setLenient(false);
str = format2.format(date);
}else if("format3".equals(format)){
format3.setLenient(false);
str = format3.format(date);
}
} catch (Exception e) {
e.printStackTrace();
}
return str;
}

/**
* 指定日期上加减天数,得到最终日期
*
* @param num
*            增加的天数(正数为加,负数为减)
* @param newDate
*             改变的日期
* @return String 日期格式:yyyy-MM-dd HH:mm:ss
* @throws ParseException
*/
public static String dateAddDayAndSubtract(int num, String newDate)
throws ParseException {
Date currdate = format1.parse(newDate);
Calendar ca = Calendar.getInstance();
ca.setTime(currdate);
ca.add(Calendar.DATE, num);// num为增加的天数,可以改变的
currdate = ca.getTime();
String enddate = format1.format(currdate);
return enddate;
}

/**
* 指定日期上加减月份,得到最终日期
*
* @param num
*            增加的月份数(正数为加,负数为减)
* @param newDate
*             改变的日期
* @return String 日期格式:yyyy-MM-dd HH:mm:ss
* @throws ParseException
*/
public static String dateAddMonthAndSubtract(int num, String newDate){
String enddate ="";
try {
Date currdate = format1.parse(newDate);
Calendar ca = Calendar.getInstance();
ca.setTime(currdate);
ca.add(Calendar.MONTH, num);// num为增加的月份,可以改变的
currdate = ca.getTime();
enddate = format1.format(currdate);
}catch(Exception ex){
ex.printStackTrace();
}
return enddate;
}

/**
* 将字符串转换成时间
*
* @param dateString
* @param format 字符串,须转换的格式,
* 参数可为:
* format1:表示yyyy-MM-dd HH:mm:ss
* format2:yyyy-MM-dd
* @return
*/
public static Date strParseDate(String dateString, String format) {
Date currdate = null;
try {
if (StringUtils.isNotBlank(dateString)) {
if("format1".equals(format)){
format1.setLenient(false);
        currdate = format1.parse(dateString);
        }else if("format2".equals(format)){
        format2.setLenient(false);
        currdate = format2.parse(dateString);
        }
Calendar ca = Calendar.getInstance();
ca.setTime(currdate);
currdate = ca.getTime();
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return currdate;
}

/**
* 比较日期的大小
* @param DATE1 如format格式参数是 yyyy-MM-dd HH:mm:ss,date1格式须同formate格式参数
* @param DATE2 如format格式参数是 yyyy-MM-dd HH:mm:ss,date2格式须同formate格式参数
* @param format 字符串,须转换的格式,
* 参数可为:
* format1:表示yyyy-MM-dd HH:mm:ss
* format2:yyyy-MM-dd
* @return int
*/
public static int compareDate(String DATE1, String DATE2,String format) {
        try {
        Date dt1 =null;
        Date dt2 =null;
        if("format1".equals(format)){
        dt1 = format1.parse(DATE1);
        dt2 = format1.parse(DATE2);
        }else if("format2".equals(format)){
        dt1 = format2.parse(DATE1);
                dt2 = format2.parse(DATE2);
        }
            if (dt1.getTime() > dt2.getTime()) {
//                System.out.println("dt1 在dt2前");
                return 1;
            } else if (dt1.getTime() < dt2.getTime()) {
//                System.out.println("dt1在dt2后");
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }
}
0
2
分享到:
评论
1 楼 hubertstar 2016-08-25  
我晕,要是用了这几个方法,哭都找不到地方哭。先说说比较严重的几个问题吧。

1. 字符串在做判断的时候,尽量用数组的操作来判断。str.trim()整个要生成一个新对象,然后再去判断“”,这个逻辑说实话没有谁在实际中会这么干。

2. static的方法,没用到任何共享变量的时候,为什么要做同步?

3. 字符串转成日期的方法,除非全局约定日期格式,否则最好将格式作为方法参数,那么这个工具方法中相当于异常保护,要么返回日期,要么空值。如果格式固定,为什么不用全局共享的DateFormat常量?

4. 再一次强调,设计金额运算的时候不要用double,脑残了才会这么干。还有用format进行解析,没关心过效率问题吗?


5. 支付订单编号,唉,你再仔细想想吧。

相关推荐

Global site tag (gtag.js) - Google Analytics