2019独角兽企业重金招聘Python工程师标准>>>

关于如何知道客户所在的时区,可以根据客户所在的ip或者用户注册提供的国家来计算出所在的时区。

package cn.teleportring.utils;
/*  * * Author weichen* *  */  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; * 与日期、时间相关的一些常用工具方法.  * <p>  * 日期(时间)的常用格式(formater)主要有: <br>  * yyyy-MM-dd HH:mm:ss <br>  *   * @author stephen  * @version 1.0.0  */
public final class DataToolImpl {   /**  * 对日期(时间)中的日进行加减计算. <br>  * 例子: <br>  * 如果Date类型的d为 2005年8月20日,那么 <br>  * calculateByDate(d,-10)的值为2005年8月10日 <br>  * 而calculateByDate(d,+10)的值为2005年8月30日 <br>  *   * @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参数指定的日期成员进行加减计算. <br>  * 例子: <br>  * 如果Date类型的d为 2005年8月20日,那么 <br>  * calculate(d,GregorianCalendar.YEAR,-10)的值为1995年8月20日 <br>  * 而calculate(d,GregorianCalendar.YEAR,+10)的值为2015年8月20日 <br>  *   * @param d  *            日期(时间).  * @param field  *            日期成员. <br>  *            日期成员主要有: <br>  *            年:GregorianCalendar.YEAR <br>  *            月:GregorianCalendar.MONTH <br>  *            日:GregorianCalendar.DATE <br>  *            时:GregorianCalendar.HOUR <br>  *            分:GregorianCalendar.MINUTE <br>  *            秒:GregorianCalendar.SECOND <br>  *            毫秒:GregorianCalendar.MILLISECOND <br>  * @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());   }   /**  * 获取当前日期对应的星期数.  * <br>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;   }   /**  * 获取所有的时区编号. <br>  * 排序规则:按照ASCII字符的正序进行排序. <br>  * 排序时候忽略字符大小写.  *   * @return 所有的时区编号(时区编号已经按照字符[忽略大小写]排序).  */  public static String[] fecthAllTimeZoneIds() {   Vector v = new Vector();   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;   return ids;   }   /**  * 测试的main方法.  *   * @param argc  */  public static void main(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 <ids.length;i++){   System.out.println(" * " + ids[i] + "=" + string2TimezoneDefault(nowDateTime,ids[i]));    }   //显示程序运行所在地的时区   System.out.println("TimeZone.getDefault().getID()=" +TimeZone.getDefault().getID());   }   /**  * 将日期时间字符串根据转换为指定时区的日期时间.  *   * @param srcFormater  *            待转化的日期时间的格式.  * @param srcDateTime  *            待转化的日期时间.  * @param dstFormater  *            目标的日期时间的格式.  * @param dstTimeZoneId  *            目标的时区编号.  *   * @return 转化后的日期时间.  */  public static String 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 = new SimpleDateFormat(srcFormater);   try {   int diffTime = getDiffTimeZoneRawOffset(dstTimeZoneId);   Date d = sdf.parse(srcDateTime);   long nowTime = d.getTime();   long newNowTime = nowTime - diffTime;   d = new Date(newNowTime);   return date2String(dstFormater, d);   } catch (ParseException e) {   //    Log.output(e.toString(), Log.STD_ERR);   return null;   } finally {   sdf = null;   }   }   /**  * 获取系统当前默认时区与UTC的时间差.(单位:毫秒)  *   * @return 系统当前默认时区与UTC的时间差.(单位:毫秒)  */  private static int getDefaultTimeZoneRawOffset() {   return TimeZone.getDefault().getRawOffset();   }   /**  * 获取指定时区与UTC的时间差.(单位:毫秒)  *   * @param timeZoneId  *            时区Id  * @return 指定时区与UTC的时间差.(单位:毫秒)  */  private static int getTimeZoneRawOffset(String timeZoneId) {   return TimeZone.getTimeZone(timeZoneId).getRawOffset();   }   /**  * 获取系统当前默认时区与指定时区的时间差.(单位:毫秒)  *   * @param timeZoneId  *            时区Id  * @return 系统当前默认时区与指定时区的时间差.(单位:毫秒)  */  private static int getDiffTimeZoneRawOffset(String timeZoneId) {   return TimeZone.getDefault().getRawOffset()   - TimeZone.getTimeZone(timeZoneId).getRawOffset();   }   /**  * 将日期时间字符串根据转换为指定时区的日期时间.  *   * @param srcDateTime  *            待转化的日期时间.  * @param dstTimeZoneId  *            目标的时区编号.  *   * @return 转化后的日期时间.  * @see #string2Timezone(String, String, String, String)  */  public static String string2TimezoneDefault(String srcDateTime,   String dstTimeZoneId) {   return string2Timezone("yyyy-MM-dd HH:mm:ss", srcDateTime,   "yyyy-MM-dd HH:mm:ss", dstTimeZoneId);   }   }

转载于:https://my.oschina.net/kingchen8080/blog/662420

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

  1. java 不同时区时间转换_Java对世界不同时区timezone之间时间转换的处理方法

    最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...

  2. java不同时区时间转换,Java不同时区(timezone)之间时间转换

    最近出现一个问题是这样的 我们的系统在国外打印的日志时间由于时差关系和国内不一致 看起来不方便 希望国外的日志和国内保持一致 即 需要对不同时区的时间做转换调整 统一为国内时间. 一.关于时区的一些概 ...

  3. Java不同时区(timezone)之间时间转换

    最近出现一个问题是这样的:我们的系统在国外打印的日志时间由于时差关系和国内不一致,看起来不方便,希望国外的日志和国内保持一致,即:需要对不同时区的时间做转换调整,统一为国内时间. 一.关于时区的一些概 ...

  4. java 全角_java 全角半角字符转换的方法实例

    这篇文章主要介绍了java 全角半角字符转换的方法,大家参考使用吧 如果搞明白了Java中全角字符和半角字符之间的关系 那他们之间的转换根本就不是个事. 可以通过下面的程序看看Java中所有字符以及对 ...

  5. 【Java编程系列】Java判断世界各时区的夏令时、冬令时

    热门系列: [Java编程系列]java用POI.Itext生成并下载PPT.PDF文件 [Java编程系列]二进制如何表示小数?0.3+0.6为什么不等于0.9?纳尼!!! 程序人生,精彩抢先看 目 ...

  6. 探索 Java 中的 Date, Calendar, TimeZone 和Timestamp

    探索 Java 中的 Date, Calendar, TimeZone 和Timestamp java 2010-12-31 08:56:49 阅读8 评论0  字号:大中小 订阅 对象 宋晟 (sh ...

  7. Java基础教程带你走进java的世界

    Java教程 Java简介 什么是Java? Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. Java分为三个体系: Java ...

  8. timezone java_如何将Java日期转换为特定的TimeZone格式

    timezone java In the last example, we learned how to convert Date to String in Java. In this example ...

  9. java 获取系统的时区_【转】Java 获取操作系统时区

    Java 可以通过 Timezone 获取时区,但是通过 Timezone 获取的时区是 JVM 初始化时保存的时区,并不是操作系统所设置的时区.当修改过操作系统的时区后,JVM 并不会同步更新.Ti ...

最新文章

  1. Linux ISCSI配置
  2. html5移动端根据百度地图api获取详细地址
  3. 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
  4. 【转】首先为人编写程序,其次才是计算机
  5. php如何从左往右轮播,js实现从左向右滑动式轮播图效果
  6. Pandas.plot 做图 demo(scatter,bar,pie)
  7. 开篇语 2008.8.11
  8. makefile文件中的依赖关系理解
  9. 如何做到免驱打印_道滘镇彩色打印机租赁公司,长安镇办公室绿植安装
  10. SAP Fiori Elements 应用里和 Fiori 3 相关的外观设置
  11. C++中const、volatile、mutable的用法
  12. 有向图生成树是如何画的_漫画:什么是最小生成树?
  13. linux es数据库 head,elasticsearch安装es-sql插件
  14. boss 计算机应用,Time Boss(电脑使用时间限制软件)官方版
  15. C#使用MathNet的矩阵与向量运算示例
  16. 好看的热力图seaborn.heatmap配色
  17. mysql 建表 game_RPG游戏数据库设计
  18. Sechunter移动应用隐私合规检测详解
  19. 修复windows系统引导
  20. 11 编程指南_流数据

热门文章

  1. 刨根问底(一):从INode客户端看如何培养兴趣
  2. NVIDIA教你用TensorRT加速深度学习推理计算 | 量子位线下沙龙笔记
  3. 太像人手了!OpenAI用打DOTA的算法,教会了机械手“盘核桃”
  4. AI显微镜面市:20分钟诊断疟疾,精度满足世卫最高标准
  5. 微软vs2008快捷键
  6. ios apns netty java codec 防止粘包
  7. sqlmap工具使用用法详解
  8. spring +springmvc+mybatis组合springmvc.xml文件配置
  9. jQuery DataTables 插件使用笔记
  10. HTML5安全风险详析之三:WebSQL攻击