分类
WEB开发

Java SimpleDateFormat获取格式化时间错误

新安装服务器,centos7系统,项目部署后,date命令显示时间正确,通过java程序获取的时间差12小时。最后查询是jvm时区问题。
解决方法:
tomcat修改catalina.sh文件,添加如下:

JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"

或者在项目中使用java代码:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
//或者
System.setProperty("user.timezone","Asia/Shanghai");

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
WEB开发

tomcat启动时自动执行代码

1、实现监听启动的接口

package cn.geekapp.timer;

import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener{
	
	/**
	 * 定时器
	 */
	private static Timer mTimer = null;
	/**
	 * 定时器启动间隔
	 */
	private static final long mPeriod = 1 * 10 * 1000L;//10秒

	@Override
	public void contextDestroyed(ServletContextEvent event) {
		// TODO Auto-generated method stub
		System.out.println("contextDestroyed begin");
		if(mTimer != null){
			mTimer.cancel();
		}
		System.out.println("contextDestroyed end");
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		// TODO Auto-generated method stub
		System.out.println("contextInitialized begin");
		mTimer = new Timer(true);
		mTimer.scheduleAtFixedRate(new MyTimerTask(), mPeriod, mPeriod);
		System.out.println("contextInitialized end");
	}

}

2、定义TimerTask

package cn.geekapp.timer;

import java.util.TimerTask;

public class MyTimerTask extends TimerTask{
	
	private static boolean isRun = false; 

	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			if(isRun){
				System.out.println("task is running,return!");
				return;
			}
			isRun = true;
			System.out.println("MyTimerTask run at time "+System.currentTimeMillis());
			//业务逻辑代码
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}finally{
			isRun = false;
		}
	}

}

3、web.xml添加监听

  
	cn.geekapp.timer.MyListener
  

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
APP开发

java日期时间格式化

java日期时间格式化工具类:

package cn.geekapp.datetimepicker;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 时间日期格式化
 */
public class DateUtil {
	public static final String FORMAT_MM_DD = "MM-dd";
	
	public static final String FORMAT_YYYY_MM = "yyyy-MM";
	
	public static final String FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
	
	public static final String FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
	
	public static final String FORMAT_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
	
	/**
	 * 获取日期字符串
	 * @param date
	 * @param format
	 * @return
	 */
	public static String getDateStrByFormat(Date date, String format){
		String result = "";
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(format);
			result = sdf.format(date);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("Exception:"+e);
		}
		return result;
	}
	
	/**
	 * 获取日期字符串
	 * @param milliseconds
	 * @param format
	 * @return
	 */
	public static String getDateStrByFormat(long milliseconds, String format){
		return getDateStrByFormat(new Date(milliseconds), format);
	}
	
	/**
	 * 字符串转日期
	 * @param datetimeStr
	 * @param format
	 * @return
	 */
	public static Date getDateByStr(String datetimeStr, String format){
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = null;
		try {
			date = sdf.parse(datetimeStr);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return date;
	}
}

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
Android开发

Java获取字符串16进制hash值

Java获取字符串16进制hash值

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Util {
private static MD5Util mInstance = null;

public static MD5Util getInstance() {
	if (mInstance == null) {
	mInstance = new MD5Util();
	}
	return mInstance;
}

/**
* 获取字符串16进制hash值
* @param input
* @return
*/
public String toHashHexStr(String input) {
	if (input == null || input.equals("")) {
	return null;
	}
	try {
	MessageDigest messageDigest = MessageDigest.getInstance("MD5");
	// 输入的字符串转换成字节数组
	byte[] inputByteArray = input.getBytes();
	// inputByteArray是输入字符串转换得到的字节数组
	messageDigest.update(inputByteArray);
	// 转换并返回结果,也是字节数组,包含16个元素
	byte[] resultByteArray = messageDigest.digest();
	// 字符数组转换成字符串返回
	return byteArrayToHex(resultByteArray);
	} catch (NoSuchAlgorithmException e) {
	e.printStackTrace();
	return null;
	}
}

private String byteArrayToHex(byte[] resultByteArray) {
	String hs = "";
	String stmp = "";
	for (int n = 0; n < resultByteArray.length; n++) {
	stmp = (java.lang.Integer.toHexString(resultByteArray[n] & 0XFF));
	if (stmp.length() == 1)
	hs = hs + "0" + stmp;
	else
	hs = hs + stmp;
	}
	return hs.toUpperCase();
}
}

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
Android开发

通过java反射机制获取私有或受保护的属性值

android开发中,有时候需要获取类中私有或受保护的属性值,整理代码如下:

import java.lang.reflect.Field;

public class ReflectUtil {

	/**
	* 类classType是否拥有以fieldName命名的属性
	* @param classType
	* @param fieldName
	* @return
	*/
	public static boolean hasDeclaredField(Class classType, String fieldName){
		Field[] fields = classType.getDeclaredFields();
		for(int i=0;i classType, Object obj, String fieldName){
		if(hasDeclaredField(classType, fieldName)){
		try {
		Field field = classType.getDeclaredField(fieldName);
		if(field != null){
		field.setAccessible(true);
		return field.get(obj);
		}
		}catch (Exception e) {
		e.printStackTrace();
		return null;
		}
		}
		return null;
	}

}

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。

分类
IT运维

Linux下安装openjdk

1、yum搜索openjdk相关版本

yum search openjdk

2、安装所需要的openjdk版本

yum install java-1.6.0-openjdk.x86_64

3、验证是否安装成功

java -version

原创内容转载请保留出处GEEK笔记(http://www.geekapp.cn/)。