java时区转换getrawo_java对世界各个时区(TimeZone)的通用转换处理方法

/** Created on 2005-6-10

* Author stephen

* Email zhoujianqiang AT gmail DOT com

* CopyRight(C)2005-2008 , All rights reserved.*/

packagecom.soft4j.utility;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.TimeZone;importjava.util.Vector;importcom.soft4j.log.Log;/*** 与日期、时间相关的一些常用工具方法.

*

* 日期(时间)的常用格式(formater)主要有:

* yyyy-MM-dd HH:mm:ss

*

*@authorstephen

*@version1.0.0*/

public final classDateTool {/*** 对日期(时间)中的日进行加减计算.

* 例子:

* 如果Date类型的d为 2005年8月20日,那么

* calculateByDate(d,-10)的值为2005年8月10日

* 而calculateByDate(d,+10)的值为2005年8月30日

*

*@paramd

* 日期(时间).

*@paramamount

* 加减计算的幅度.+n=加n天;-n=减n天.

*@return计算后的日期(时间).*/

public static Date calculateByDate(Date d, intamount) {returncalculate(d, GregorianCalendar.DATE, amount);

}public static Date calculateByMinute(Date d, intamount) {returncalculate(d, GregorianCalendar.MINUTE, amount);

}public static Date calculateByYear(Date d, intamount) {returncalculate(d, GregorianCalendar.YEAR, amount);

}/*** 对日期(时间)中由field参数指定的日期成员进行加减计算.

* 例子:

* 如果Date类型的d为 2005年8月20日,那么

* calculate(d,GregorianCalendar.YEAR,-10)的值为1995年8月20日

* 而calculate(d,GregorianCalendar.YEAR,+10)的值为2015年8月20日

*

*@paramd

* 日期(时间).

*@paramfield

* 日期成员.

* 日期成员主要有:

* 年:GregorianCalendar.YEAR

* 月:GregorianCalendar.MONTH

* 日:GregorianCalendar.DATE

* 时:GregorianCalendar.HOUR

* 分:GregorianCalendar.MINUTE

* 秒:GregorianCalendar.SECOND

* 毫秒:GregorianCalendar.MILLISECOND

*@paramamount

* 加减计算的幅度.+n=加n个由参数field指定的日期成员值;-n=减n个由参数field代表的日期成员值.

*@return计算后的日期(时间).*/

private static Date calculate(Date d, int field, intamount) {if (d == null)return null;

GregorianCalendar g= newGregorianCalendar();

g.setGregorianChange(d);

g.add(field, amount);returng.getTime();

}/*** 日期(时间)转化为字符串.

*

*@paramformater

* 日期或时间的格式.

*@paramaDate

* java.util.Date类的实例.

*@return日期转化后的字符串.*/

public staticString date2String(String formater, Date aDate) {if (formater == null || "".equals(formater))return null;if (aDate == null)return null;return (newSimpleDateFormat(formater)).format(aDate);

}/*** 当前日期(时间)转化为字符串.

*

*@paramformater

* 日期或时间的格式.

*@return日期转化后的字符串.*/

public staticString date2String(String formater) {return date2String(formater, newDate());

}/*** 获取当前日期对应的星期数.

*
1=星期天,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六

*@return当前日期对应的星期数*/

public static intdayOfWeek() {

GregorianCalendar g= newGregorianCalendar();int ret =g.get(java.util.Calendar.DAY_OF_WEEK);

g= null;returnret;

}/*** 获取所有的时区编号.

* 排序规则:按照ASCII字符的正序进行排序.

* 排序时候忽略字符大小写.

*

*@return所有的时区编号(时区编号已经按照字符[忽略大小写]排序).*/

public staticString[] fecthAllTimeZoneIds() {

Vector v= newVector();

String[] ids=TimeZone.getAvailableIDs();for (int i = 0; i < ids.length; i++) {

v.add(ids[i]);

}

java.util.Collections.sort(v, String.CASE_INSENSITIVE_ORDER);

v.copyInto(ids);

v= null;returnids;

}/*** 测试的main方法.

*

*@paramargc*/

public static voidmain(String[] argc) {

String[] ids=fecthAllTimeZoneIds();

String nowDateTime=date2String("yyyy-MM-dd HH:mm:ss");

System.out.println("The time Asia/Shanhai is " + nowDateTime);//程序本地运行所在时区为[Asia/Shanhai]//显示世界每个时区当前的实际时间

for(int i=0;i

System.out.println(" * " + ids[i] + "=" +string2TimezoneDefault(nowDateTime,ids[i]));

}//显示程序运行所在地的时区

System.out.println("TimeZone.getDefault().getID()=" +TimeZone.getDefault().getID());

}/*** 将日期时间字符串根据转换为指定时区的日期时间.

*

*@paramsrcFormater

* 待转化的日期时间的格式.

*@paramsrcDateTime

* 待转化的日期时间.

*@paramdstFormater

* 目标的日期时间的格式.

*@paramdstTimeZoneId

* 目标的时区编号.

*

*@return转化后的日期时间.*/

public staticString string2Timezone(String srcFormater,

String srcDateTime, String dstFormater, String dstTimeZoneId) {if (srcFormater == null || "".equals(srcFormater))return null;if (srcDateTime == null || "".equals(srcDateTime))return null;if (dstFormater == null || "".equals(dstFormater))return null;if (dstTimeZoneId == null || "".equals(dstTimeZoneId))return null;

SimpleDateFormat sdf= newSimpleDateFormat(srcFormater);try{int diffTime =getDiffTimeZoneRawOffset(dstTimeZoneId);

Date d=sdf.parse(srcDateTime);long nowTime =d.getTime();long newNowTime = nowTime -diffTime;

d= newDate(newNowTime);returndate2String(dstFormater, d);

}catch(ParseException e) {

Log.output(e.toString(), Log.STD_ERR);return null;

}finally{

sdf= null;

}

}/*** 获取系统当前默认时区与UTC的时间差.(单位:毫秒)

*

*@return系统当前默认时区与UTC的时间差.(单位:毫秒)*/

private static intgetDefaultTimeZoneRawOffset() {returnTimeZone.getDefault().getRawOffset();

}/*** 获取指定时区与UTC的时间差.(单位:毫秒)

*

*@paramtimeZoneId

* 时区Id

*@return指定时区与UTC的时间差.(单位:毫秒)*/

private static intgetTimeZoneRawOffset(String timeZoneId) {returnTimeZone.getTimeZone(timeZoneId).getRawOffset();

}/*** 获取系统当前默认时区与指定时区的时间差.(单位:毫秒)

*

*@paramtimeZoneId

* 时区Id

*@return系统当前默认时区与指定时区的时间差.(单位:毫秒)*/

private static intgetDiffTimeZoneRawOffset(String timeZoneId) {returnTimeZone.getDefault().getRawOffset()-TimeZone.getTimeZone(timeZoneId).getRawOffset();

}/*** 将日期时间字符串根据转换为指定时区的日期时间.

*

*@paramsrcDateTime

* 待转化的日期时间.

*@paramdstTimeZoneId

* 目标的时区编号.

*

*@return转化后的日期时间.

*@see#string2Timezone(String, String, String, String)*/

public staticString string2TimezoneDefault(String srcDateTime,

String dstTimeZoneId) {return string2Timezone("yyyy-MM-dd HH:mm:ss", srcDateTime,"yyyy-MM-dd HH:mm:ss", dstTimeZoneId);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值