Java時區的轉換
邏輯如下:
1.明確你要轉的當前時間所在的時區
2.明確你要轉向時間所在的時區
3.獲取當前時間所在時區相對GMT的偏移量
4.當前時間-相對GMT的偏移量來獲得當前時間的GMT的值
5.GMT的值+轉向時區相對GMT的偏移量獲取轉向時區的時間值
例如:你要從GMT+8時間轉向GMT+7時間
sourceTimeZone 為GMT+8
targetTimeZone為GMT+7
/**
*
*/
package test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class DateTimeUtil {
static String DEFAULT_TIMEZONE = "GMT+8";
static String DEFAULT_FORMAT = "d-MMM-yyyy HH:mm (z)";
/**
* 轉換時間時區
* @param convertString 需要轉的時間字符串
* @param format 格式話字符串 例如d-MMM-yyyy HH:mm (z)
* @param sourceTimeZone 源時間時區
* @param targetTimeZone 目標時間時區
* @return
* @throws ParseException
*/
public static Date ConverDateGMT(String convertString,String format,String sourceTimeZone,String targetTimeZone) throws ParseException
{
Date date=null;
if(isEmpty(sourceTimeZone)){
sourceTimeZone = DEFAULT_TIMEZONE;
}
if(isEmpty(targetTimeZone)){
targetTimeZone = DEFAULT_TIMEZONE;
}
if(isEmpty(format)){
format = DEFAULT_FORMAT;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
//獲取傳入的時間值
Long time = new Date(sdf.parse(convertString).getTime()).getTime();
//獲取源時區時間相對的GMT時間
Long sourceRelativelyGMT=time-TimeZone.getTimeZone(sourceTimeZone).getRawOffset();
//GMT時間+目標時間時區的偏移量獲取目標時間
Long targetTime=sourceRelativelyGMT+TimeZone.getTimeZone(targetTimeZone).getRawOffset();
date= new Date(targetTime);
return date;
}
/**
* Check empty string
* <pre>
* null: true
* "": true
* " ":true
* </>
*
* @param value
* @return
*/
public static boolean isEmpty(String value) {
boolean emptyFlg = false;
if (null == value || value.trim().length() <= 0) {
emptyFlg = true;
}
return emptyFlg;
}
}
posted on 2012-09-17 14:15
孤飛燕 閱讀(6999)
評論(0) 編輯 收藏 所屬分類:
Java