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

您所在的位置:网站首页 时区如何划分时间范围图片 java对世界各个时区(TimeZone)的通用转换处理方法

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

2024-07-17 22:30| 来源: 网络整理| 查看: 265

在进行国际性软件项目开发的过程中,有时候会碰到一些比较特殊的要求。比如:比如说,你做的是个购物网站(假设服务器放在中国上海),当全世界客户在你的网站上下订单买东西后,往往希望看到客户所在地下单时间,比如说我是个美国纽约人,我在你的网站上下单后,你给我看到一个上海的下单时间,会觉得非常的奇怪。众所周知,纽约时间相对上海时间大约要晚13小时,如果让客户看到本地时区的时间,将变得更加符合客户的时间观念,使得客户理解比较方便。 其实,java中早已考虑过世界时区(TimeZone)这个问题,并给出了比较合理的解决方法,可以比较方便的进行世界时区时间的转化,将一个时区的时间转换成另一个时区的时间。可以看看下面的的实际例子(运行例子的main()方法)。 关于如何知道客户所在的时区,可以根据客户所在的ip或者用户注册提供的国家来计算出所在的时区。

Java代码 复制代码  收藏代码 /*   * Created on 2005-6-10   * Author stephen   * Email zhoujianqiang AT gmail DOT com   * CopyRight(C)2005-2008 , All rights reserved.   */  package com.soft4j.utility;     import java.text.ParseException;   import java.text.SimpleDateFormat;   import java.util.Date;   import java.util.GregorianCalendar;   import java.util.TimeZone;   import java.util.Vector;     import com.soft4j.log.Log;     /**   * 与日期、时间相关的一些常用工具方法.   * 

  * 日期(时间)的常用格式(formater)主要有:    * yyyy-MM-dd HH:mm:ss    *    * @author stephen   * @version 1.0.0   */  public final class DateTool {         /**       * 对日期(时间)中的日进行加减计算.        * 例子:        * 如果Date类型的d为 2005年8月20日,那么        * calculateByDate(d,-10)的值为2005年8月10日        * 而calculateByDate(d,+10)的值为2005年8月30日        *        * @param d       *            日期(时间).       * @param amount       *            加减计算的幅度.+n=加n天;-n=减n天.       * @return 计算后的日期(时间).       */      public static Date calculateByDate(Date d, int amount) {           return calculate(d, GregorianCalendar.DATE, amount);       }              public static Date calculateByMinute(Date d, int amount) {           return calculate(d, GregorianCalendar.MINUTE, amount);       }              public static Date calculateByYear(Date d, int amount) {           return calculate(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日        *        * @param d       *            日期(时间).       * @param field       *            日期成员.        *            日期成员主要有:        *            年:GregorianCalendar.YEAR        *            月:GregorianCalendar.MONTH        *            日:GregorianCalendar.DATE        *            时:GregorianCalendar.HOUR        *            分:GregorianCalendar.MINUTE        *            秒:GregorianCalendar.SECOND        *            毫秒:GregorianCalendar.MILLISECOND        * @param amount       *            加减计算的幅度.+n=加n个由参数field指定的日期成员值;-n=减n个由参数field代表的日期成员值.       * @return 计算后的日期(时间).       */      private static Date calculate(Date d, int field, int amount) {           if (d == null)               return null;           GregorianCalendar g = new GregorianCalendar();           g.setGregorianChange(d);           g.add(field, amount);           return g.getTime();       }         /**       * 日期(时间)转化为字符串.       *        * @param formater       *            日期或时间的格式.       * @param aDate       *            java.util.Date类的实例.       * @return 日期转化后的字符串.       */      public static String date2String(String formater, Date aDate) {           if (formater == null || "".equals(formater))               return null;           if (aDate == null)               return null;           return (new SimpleDateFormat(formater)).format(aDate);       }         /**       * 当前日期(时间)转化为字符串.       *        * @param formater       *            日期或时间的格式.       * @return 日期转化后的字符串.       */      public static String date2String(String formater) {           return date2String(formater, new Date());       }              /**       * 获取当前日期对应的星期数.       * 1=星期天,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五,7=星期六       * @return 当前日期对应的星期数       */      public static int dayOfWeek() {           GregorianCalendar g = new GregorianCalendar();           int ret = g.get(java.util.Calendar.DAY_OF_WEEK);           g = null;           return ret;       }           /**       * 获取所有的时区编号.        * 排序规则:按照ASCII字符的正序进行排序.        * 排序时候忽略字符大小写.       *        * @return 所有的时区编号(时区编号已经按照字符[忽略大小写]排序).       */      public static String[] fecthAllTimeZoneIds() {           Vector v = new Vector();           String[] ids = TimeZone.getAvailableIDs();           for (int i = 0; i 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3