`
hanjava
  • 浏览: 32375 次
  • 性别: 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. 支付订单编号,唉,你再仔细想想吧。

相关推荐

    这些年整理的一些常用Utils工具类 , 希望对大家开发有所裨益

    这里提到的"这些年整理的一些常用Utils工具类"是一份集合了多种功能的Java工具库,旨在为开发人员提供便利。以下将详细介绍其中可能包含的知识点: 1. **Utils工具类的设计理念**: - 工具类通常设计为静态方法...

    java常用工具类整理

    这些工具类都是 Java 开发中常用的实用工具,可以帮助开发者快速高效地完成各种任务。 一、Spring 工具类 1. org.springframework.util.StringUtils 工具类用于判断字符串非空,常用的方法有 isEmpty()、hasText()...

    word源码java-javaUtils-:java常用的工具类,附带Springboot配置属性目录

    工作中实用的Java工具类整理 config 多数据源的配置及动态切换数据库的切面配置(还未完善好,配置文件暂上传) database JedisUtil(redis连接操作实现) encrypt RsaUtils(rsa加密Java实现) http http.async ...

    dwr utils.js常用方法整理

    在深入探讨DWR中Util.js的常用方法之前,我们先简要回顾一下DWR(Direct Web Remoting)是什么。DWR是一种开源框架,允许在Java服务器端与客户端之间进行Ajax调用,使得JavaScript可以直接调用服务器端的Java方法,...

    Utils-Everywhere, 整理并收集各种常用的覆盖面广的工具类.zip

    Utils-Everywhere 是一个开源项目,它集合了各种常用且功能广泛的工具类,旨在为开发者提供便利,提高开发效率。这个项目的重点在于它的通用性,覆盖了许多常见的编程任务,无论是在Android、Java还是其他Java生态...

    工作11年总结的常用java工具类,上百种方法,开发中绝对用得到

    在11年的编程生涯中,积累了一系列常用的Java工具类,这些类包含了上百种方法,几乎覆盖了大部分常见的编程场景。下面将详细阐述一些重要的Java工具类及其常用方法。 1. **Apache Commons Lang**: Apache Commons ...

    AndroidUtils:整理常用的Android工具类

    AndroidUtils 使用方法 dependencies { implementation 'com.github.luffyshu:AndroidUtils:v1.0.0' }

    Utils-Everywhere:整理并收集各种常用的覆盖面广的工具类

    整理并收集各种常用的覆盖面广的工具类。 1. 简介 是日常项目和工作中将常 用的代码进行封装和整理形成的工具类,一部分是结合自己再实际开发中整理而得,一部分则是直接参考或使用其他优 秀的开源工具类(文末和...

    Android开发中常用的工具类整理

    在Android应用开发中,工具类(Utils类)是开发者经常使用的辅助组件,它们通常包含一些通用的方法,可以方便地在各个模块之间复用,提高代码的可读性和维护性。以下是一些Android开发中常见的工具类及其关键知识点...

    My-utils:一些可重用的代码

    2. **日期与时间处理**:Java中的日期和时间处理往往比较复杂,My-utils可能封装了一些易于使用的日期时间工具类,简化日期时间的操作。 3. **网络请求**:可能提供了HTTP请求的便捷接口,包括GET、POST等,对于...

    Java基础教程1.pdf(2021年整理精品文档).docx

    - 掌握常用的类库,如算法工具集、CommonsUtils,以及自定义类如MyArrayList的实现。 - 学习异常处理机制,理解如何捕获和处理程序运行时可能遇到的问题。 2. **面向对象编程**: - 理解类的抽象,如何创建和...

    Android代码-FastAndrUtils

    Fastandrutils 是一套整理修改整合的android开发常用的工具类。 这样可以减少复制粘贴代码,从而减少重复代码,也不用为了一个常用的功能去谷歌百度,让代码更简洁,让开发更高效。 同时希望您的添加完善,让...

    SuperUtils:utils项目

    Android工具库 其中很大一部分是Android应用程序开发过程中常用的工具。 工具来自网络并自行编写。 (不断收集整理) (中文文档)[ ]快速使用:在项目目录中的build.gradle添加以下代码: allprojects { ...

    java8源码-java_study_summary:JAVA知识代码汇总

    因此想要好好整理一番,方便回顾与学习,所以这是一个总结向的代码仓库。 本人会把个人学习的知识、实际项目遇到的难题、有趣的功能实现例子存于此,包括但不限于以下几种: 原生 API 工具操作类 设计模式 数据结构 ...

    DemoLists:一个工具类,存放View、Animation、Utils等

    项目中放一些常用的工具类在这里,同时将自己这半年学到的东西进行整理。 “温故而知新,可以为师矣”,的确,需要正常性地总结回顾,因为最近也发现,之前写的项目中用的一些,现在在新项目中使用时,有些记不太清...

    懒惰:Android工具自己整理的常用的工具类

    #这个是我自己收集整理的一些常用的工具类##有好的工具类,欢迎提交PR 作者微博: ##增加常用库的README_LIB 内容说明 工具 描述 动画工具类 APP相关信息工具类 目录资源获取 加密 获取Bitmap和对Bitmap的操作 ...

    android-utils:包含大多数Android实用程序类

    工具类来源整理自网络和自己编写。 所有的工具类简介(a-z): 类 介绍 动画工具类 APP相关信息工具类 读取资产目录中数据库工具类 位图工具类主要包括获取位图和对位图的操作 加密与解密的工具类 常用颜色色值工具...

    RobotFramework+selenium自动化测试-齐涛博客教程整理

    这一部分是整个系列的核心内容之一,因为它涵盖了实际操作中常用的功能和技巧。尽管该部分内容未完全给出,但可以推测它可能涉及以下主题: - 使用Selenium Library定位菜单项和工具栏按钮。 - 模拟点击和其他用户...

    android有用代码片段.

    将这些常用或实用的代码片段整理在一起可以大大提高开发效率。以下是一些Android开发中的关键知识点,它们涵盖了获取系统信息、处理ListView点击事件以及获取应用相关数据等方面。 1. **获取系统版本号**: 通过`...

    jspjspjspjsp

    `type`:虽然可以指定JavaBean的类型,但在实际使用中并不常用。 - C. `name`:与`id`类似,但更推荐使用`id`。 - E. `scope`:用于设置JavaBean的作用域,默认为`page`。 - F. `create`:此属性已经不再使用。 ...

Global site tag (gtag.js) - Google Analytics