package com.xinli.broadband2.self.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class Util {
/**
* ---xiaowu
*
* -----------------------------------------
* 一般常用的格式为下面这些:
* y 年/M 月/d 日/h 时 在上午或下午 (1~12)/H 时 在一天中 (0~23)
* m 分/s 秒/S 毫秒
* -------------------------------------------
*
* 根据自己设定的格式获得当前时间
* @param format :时间格式 如:yyyy-MM-dd HH:mm:ss
* @return 自己设置的时间格式
*/
public static String getCurrentDateFormat(String format)
{
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(new Date());
}
/**
* --xiaowu
*
* 将给定的时间根据自己设定的格式转换后返回一个时间格式的字符串
* @param date
* @param format
* @return
*/
public static String getDateFormat(Date date,String format)
{
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(date);
}
/**
* --xiaowu 对于位数较大的随机数来讲,此方法明显要快很多(相比与getRandomString方法)
*
* 随机数的个数(有可能会重复,数位越多重复的可能性就越小,
* 如果位数很大,就采用随机数加随机数的方式构造更大的随机数)
* @param numLength :
* @return 指定个数的随机数(位数不够,补0后截断)
*/
public static String getRandNumByLength(int numLength)
{
String randNum="";
if(numLength<0) return "000000000";
if(numLength>9)
{
int i= numLength/9;
int j= numLength%9;
for (int t=0;t<i;t++)
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt(1000000000);
randNum+=randDate.substring(randDate.length()-9, randDate.length());
}
if(j>0)
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt((int)(Math.pow(10,j)));
randNum+=randDate.substring(randDate.length()-j, randDate.length());
}
return randNum;
}
else
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt((int)(Math.pow(10,numLength)));
//System.out.println(randDate);
randNum=randDate.substring(randDate.length()-numLength, randDate.length());
}
return randNum;
}
/**
* --xiaowu
*
* 获取num(最好大于14位,若小于14位,此方法退化为随机数的生成)位流水号(要求不重复)
*
* 当前时间的纳秒数+n位随机数(n=要求流水号的位数-当前时间纳秒数的位数)
* 当前时间的纳秒数几乎不会重复,若再加上随机数重复的几率就更小了。
* @param num:流水号的位数
* @return
*/
public static String getSerialNumber(int num)
{
String currentTime=System.nanoTime()+"";
if(num<currentTime.length()) return currentTime.substring(currentTime.length()-num,currentTime.length());
return currentTime+getRandNumByLength(num-currentTime.length());
}
/**
* ----xiaowu
*
* 随机数的生成
* @param nRandomCount 随机数的位数
* @param isNumber ---true:随机数全为数字;false:随机数为数字字母混编;
* @return
*/
public static String getRandomString(int nRandomCount, boolean isNumber) {
char[] a = null;
if (isNumber) {
a = new char[10];
for (int i = 48, j = 0; i <= 57; i++, j++) {
a[j] = (char) i;
}
} else {
// ASCII 48~57, String 0~9;
// ASCII 65~90, String A-Z;
// ASCII 97~122,String a-z;
a = new char[62];
for (int i = 48, j = 0; i <= 122; i++) {
if ((i > 57 && i < 65) || (i > 90 && i < 97)) {
continue;
} else {
a[j] = (char) i;
j++;
}
}
}
String strRand = "";
int LengthOfRandom = a.length;
Random random = new Random();
for (int i = 0; i < nRandomCount; i++) {
int nRand = random.nextInt(LengthOfRandom);
strRand += a[nRand];
}
return strRand;
}
public static void main(String []args)
{
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class Util {
/**
* ---xiaowu
*
* -----------------------------------------
* 一般常用的格式为下面这些:
* y 年/M 月/d 日/h 时 在上午或下午 (1~12)/H 时 在一天中 (0~23)
* m 分/s 秒/S 毫秒
* -------------------------------------------
*
* 根据自己设定的格式获得当前时间
* @param format :时间格式 如:yyyy-MM-dd HH:mm:ss
* @return 自己设置的时间格式
*/
public static String getCurrentDateFormat(String format)
{
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(new Date());
}
/**
* --xiaowu
*
* 将给定的时间根据自己设定的格式转换后返回一个时间格式的字符串
* @param date
* @param format
* @return
*/
public static String getDateFormat(Date date,String format)
{
SimpleDateFormat df = new SimpleDateFormat(format);
return df.format(date);
}
/**
* --xiaowu 对于位数较大的随机数来讲,此方法明显要快很多(相比与getRandomString方法)
*
* 随机数的个数(有可能会重复,数位越多重复的可能性就越小,
* 如果位数很大,就采用随机数加随机数的方式构造更大的随机数)
* @param numLength :
* @return 指定个数的随机数(位数不够,补0后截断)
*/
public static String getRandNumByLength(int numLength)
{
String randNum="";
if(numLength<0) return "000000000";
if(numLength>9)
{
int i= numLength/9;
int j= numLength%9;
for (int t=0;t<i;t++)
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt(1000000000);
randNum+=randDate.substring(randDate.length()-9, randDate.length());
}
if(j>0)
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt((int)(Math.pow(10,j)));
randNum+=randDate.substring(randDate.length()-j, randDate.length());
}
return randNum;
}
else
{
Random rand=new Random();
String randDate="000000000"+rand.nextInt((int)(Math.pow(10,numLength)));
//System.out.println(randDate);
randNum=randDate.substring(randDate.length()-numLength, randDate.length());
}
return randNum;
}
/**
* --xiaowu
*
* 获取num(最好大于14位,若小于14位,此方法退化为随机数的生成)位流水号(要求不重复)
*
* 当前时间的纳秒数+n位随机数(n=要求流水号的位数-当前时间纳秒数的位数)
* 当前时间的纳秒数几乎不会重复,若再加上随机数重复的几率就更小了。
* @param num:流水号的位数
* @return
*/
public static String getSerialNumber(int num)
{
String currentTime=System.nanoTime()+"";
if(num<currentTime.length()) return currentTime.substring(currentTime.length()-num,currentTime.length());
return currentTime+getRandNumByLength(num-currentTime.length());
}
/**
* ----xiaowu
*
* 随机数的生成
* @param nRandomCount 随机数的位数
* @param isNumber ---true:随机数全为数字;false:随机数为数字字母混编;
* @return
*/
public static String getRandomString(int nRandomCount, boolean isNumber) {
char[] a = null;
if (isNumber) {
a = new char[10];
for (int i = 48, j = 0; i <= 57; i++, j++) {
a[j] = (char) i;
}
} else {
// ASCII 48~57, String 0~9;
// ASCII 65~90, String A-Z;
// ASCII 97~122,String a-z;
a = new char[62];
for (int i = 48, j = 0; i <= 122; i++) {
if ((i > 57 && i < 65) || (i > 90 && i < 97)) {
continue;
} else {
a[j] = (char) i;
j++;
}
}
}
String strRand = "";
int LengthOfRandom = a.length;
Random random = new Random();
for (int i = 0; i < nRandomCount; i++) {
int nRand = random.nextInt(LengthOfRandom);
strRand += a[nRand];
}
return strRand;
}
public static void main(String []args)
{
}
}