- 浏览: 2963679 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/260343 》 谢谢支持!★★★
在进行国际性软件项目开发的过程中,有时候会碰到一些比较特殊的要求。比如:比如说,你做的是个购物网站(假设服务器放在中国上海),当全世界客户在你的网站上下订单买东西后,往往希望看到客户所在地下单时间,比如说我是个美国纽约人,我在你的网站上下单后,你给我看到一个上海的下单时间,会觉得非常的奇怪。众所周知,纽约时间相对上海时间大约要晚13小时,如果让客户看到本地时区的时间,将变得更加符合客户的时间观念,使得客户理解比较方便。
其实,java中早已考虑过世界时区(TimeZone)这个问题,并给出了比较合理的解决方法,可以比较方便的进行世界时区时间的转化,将一个时区的时间转换成另一个时区的时间。可以看看下面的的实际例子(运行例子的main()方法)。
关于如何知道客户所在的时区,可以根据客户所在的ip或者用户注册提供的国家来计算出所在的时区。
-------------------------------------------------------------
分享知识 分享快乐, 希望文章能给需要的朋友带来小小的帮助。
另外,欢迎朋友转载,转载时请注明出处,谢谢!
你说的第3步实现的关键还在于要确定用户所在的时区。
第三步js直接new date中getTime就可以获取
可能这样会比较好:1. 数据库中时间,都用 GMT 时间。2. 页面显示,用自定义 GMT_time JSP tag lib 显示。所有页面都用这个 tag lib.3. 用户录入的时间,保存前转换成 GMT 时间。4. http session 中,最好不要保存 时间数据。麻烦的是第三步,写起来麻烦。
你说的第3步实现的关键还在于要确定用户所在的时区。
在进行国际性软件项目开发的过程中,有时候会碰到一些比较特殊的要求。比如:比如说,你做的是个购物网站(假设服务器放在中国上海),当全世界客户在你的网站上下订单买东西后,往往希望看到客户所在地下单时间,比如说我是个美国纽约人,我在你的网站上下单后,你给我看到一个上海的下单时间,会觉得非常的奇怪。众所周知,纽约时间相对上海时间大约要晚13小时,如果让客户看到本地时区的时间,将变得更加符合客户的时间观念,使得客户理解比较方便。
其实,java中早已考虑过世界时区(TimeZone)这个问题,并给出了比较合理的解决方法,可以比较方便的进行世界时区时间的转化,将一个时区的时间转换成另一个时区的时间。可以看看下面的的实际例子(运行例子的main()方法)。
关于如何知道客户所在的时区,可以根据客户所在的ip或者用户注册提供的国家来计算出所在的时区。
/* * 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; /** * 与日期、时间相关的一些常用工具方法. * <p> * 日期(时间)的常用格式(formater)主要有: <br> * yyyy-MM-dd HH:mm:ss <br> * * @author stephen * @version 1.0.0 */ public final class DateTool { /** * 对日期(时间)中的日进行加减计算. <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); } }
-------------------------------------------------------------
分享知识 分享快乐, 希望文章能给需要的朋友带来小小的帮助。
另外,欢迎朋友转载,转载时请注明出处,谢谢!
评论
3 楼
BeMyself_wangl
2011-09-29
字体颜色: [color=red]文字 提示:您可以使用 color=#FF0000[/color][size=small][/size][align=left][/align]
2 楼
inpower
2010-01-19
stephen830 写道
你说的第3步实现的关键还在于要确定用户所在的时区。
第三步js直接new date中getTime就可以获取
1 楼
stephen830
2008-11-01
jacklondon 写道
可能这样会比较好:1. 数据库中时间,都用 GMT 时间。2. 页面显示,用自定义 GMT_time JSP tag lib 显示。所有页面都用这个 tag lib.3. 用户录入的时间,保存前转换成 GMT 时间。4. http session 中,最好不要保存 时间数据。麻烦的是第三步,写起来麻烦。
你说的第3步实现的关键还在于要确定用户所在的时区。
发表评论
-
Java的内存机制
2016-08-22 13:27 4391.Java的内存机制 Java 把内存划分成两 ... -
监听域对象中属性的变更的监听器
2016-07-18 19:06 1696监听域对象中属性的变更的监听器 域对象中属性 ... -
HttpSessionActivationListener
2016-07-18 18:46 596HttpSessionActivationListe ... -
Web容器监听器(实现在线统计人数,踢人)
2016-07-18 10:48 907Web容器监听器(实现在线统计人数,踢人) Servl ... -
HttpSessionBindingListener接口
2016-07-18 10:29 599HttpSessionBindingListene ... -
ServletRequestAttributeListener接口
2016-07-17 22:24 7822. HttpSessionAttribut ... -
Servlet3中异步Servlet特性介绍
2016-07-17 15:50 797Servlet3中异步Servlet特性介绍 ... -
HttpSessionAttributeListener
2016-07-15 17:49 644HttpSessionAttributeListener ... -
使用ServletContextAttributeListener
2016-07-15 16:47 787使用ServletContextAttr ... -
ServletRequestListener
2016-07-15 16:25 560ServletRequestListener接口 ... -
HttpSessionListener
2016-07-15 14:56 590HttpSessionListener接口 M ... -
ServletContextListener 接口
2016-07-15 12:16 577在 Servlet API 中有一个 Se ... -
ReflectASM,高性能的反射
2016-04-29 17:19 922http://www.oschina.net/p/r ... -
Java多线程与静态方法
2016-04-26 11:52 806Java多线程与静态方法 在多线程中使用静态方法会发生什么 ... -
log4j日志输出格式
2016-04-12 20:58 1063log4j日志输出格式 在LOG4J的配置文件中,l ... -
Servlet3.0
2016-04-12 16:58 646一、Servlet3.0介绍 Servlet3 ... -
log4j2 使用详解
2016-04-12 14:14 1407log4j2 使用详解 转载自 Blog of ... -
Eclipse jar打包和命令行运行
2016-04-08 10:44 2900?Eclipse jar打包和命令行运行 第1步: ... -
GRAPHICSMAGICK+IM4JAVA错误Cannot run program "gm": error=2
2015-05-19 15:27 4061在通过 GRAPHICSMAGICK+IM4JAVA ... -
GraphicsMagick安装、实时生成缩略图
2015-05-19 13:39 2363GraphicsMagick安装、实时生成缩略图 ...
相关推荐
主要介绍了Java对世界不同时区timezone之间时间转换的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
世界范围内的时区列表。由 java.util.TimeZone 类导出
IANA Time Zone Database (简称tzdata) 时区数据
如何修改时区(TIMEZONE)如何修改时区(TIMEZONE)如何修改时区(TIMEZONE)如何修改时区(TIMEZONE)
TimeZone可以用来获取或者规定时区,也可以用来计算时差,这里我们就来详解Java中的时区类TimeZone的用法,特别要注意下面所提到的TimeZone相关的时间校准问题.
IDEA连接mysql报时区serverTimezone错误 解决方案
1. 获取时区时间 public static ZonedDateTime getNow(int offset) 2. 解析指定时间 public static ZonedDateTime parse(String date,String dateFormat,int offset) 3. 获取某一天的零点 public static ...
NTPClient - ESP8266的NTP客户端库,带时区timezone支持
最新Google日历的时区选择列表Time zone,2021年9月2日
主要介绍了java转换时区时间过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
先选择需要转换的时区,然后选择将时间转化为Long值还是将Long值转化为时间。
TimeZoneNames, 使用CLDR和TZDB源提供本地化时区名称 TimeZoneNames 使用CLDR和TZDB源提供本地化时区名称的简单库。为什么因为. NET's 通常的时区显示名称没有正确地本地化,并且不适合各种方案。 阅读这里博客文章...
主要介绍了Java时区处理之Date,Calendar,TimeZone,SimpleDateFormat的区别于用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前端项目-timezone-js,JavaScript timezone library based on Olson timezone data
要求经过测试: Ubuntu 16.04 LTS Ubuntu 18.04 LTS Ubuntu 20.04 LTS 应该与: 所有Ubuntu 所有Debian角色变量 ag_timezone : A timezone (e.g Etc/UTC)依存关系没有任何。剧本范例 - hosts : servers roles : - { ...
Java初学者练习题,使用if else循环完成,可对初学者提供一定的参考。
可通过SQL> SELECT * FROM v$timezone_file;命令查询时区版本 安装过程可以查看我的文章https://blog.csdn.net/weixin_43885834/article/details/105745901 安装补丁后还需要调整时区到最新,调整时区脚本 ...
mongoose-timezone基本上将当前时区偏移量添加到存储之前的日期,并在检索数据时删除偏移量。 这样,日期就可以在数据库和应用程序中保持比例。安装npm install mongoose-timezone-保存用法const mongoose = ...
虽然 PHP 有一些很棒的解析来处理许多不同的日期时间格式,但它对时区并不那么宽容。 这门课有助于解决这个问题。用法目前支持在四种不同的时区格式之间进行转换。 您可以定义您感兴趣的时区,或者只是在其上抛出...
是一款带世界地图的jquery时区选择插件。该jquery时区选择器采用响应式设计,使你可以快速的在一张基于SVG的世界地图上选择不同的时区。