浏览 2789 次
|
锁定老贴子 主题:请教:国际化时间怎么处理?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2005-06-09
我觉得有两种情况需要处理国际化的时间问题:
1 -- 客户端选择了某个时间 ,把这个时间以一标准时间保存到数据库中去 2 -- 从数据库提取一个标准时间(一条记录),显示在客户端 因为各客户端所处时区不一样,所以要分别以各自时区来显示时间 我现在想知道的是:客户端 怎么得到它自已的时区? 大家是怎么处理的?? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-09
我没有看明白你的需求.但是可以得到客户端的时区.
TimeZone.getDefault(); 时间也可以根据不同的时区初始化. Calendar.getIntance(TimeZone.getTimeZone(String args)); |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
引用 我没有看明白你的需求.但是可以得到客户端的时区. TimeZone.getDefault(); 时间也可以根据不同的时区初始化. Calendar.getIntance(TimeZone.getTimeZone(String args)); TimeZone.getDefault(); 这个应该是得到服务器端的时区吧。 需求是这样的: 如在美国的客户 选择某个时间 作查询条件。而数据库保存的时间是我们北京时间 所以这应该把美国客户端的时间 转成 北京时间 来做查询! 而这转换是就少不了 要得到客户端的时区吧。 |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
哦!明白了.是不是没有客户端的BS.业务数据是时间敏感的,需要转换为北京时间作处理.给用户结果.因此无法得到用户处在哪一个时区就不能转换时间.
如果是这样的话,我觉得只有在页面上让用户选择自己所处的时区.在以cookie形式或是url重写的形式传过来.再在server端转换时间.不知道还有没有其它的办法? |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
是这样的!
能不能用代码来自动得到客户端的时区??? 解决这种需求 不知道是否还有其它方案? |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-10
用js不可以吗?
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-13
想想google是怎么做的?是不是通过ip地址来区分的呢?
|
|
| 返回顶楼 | |
|
最后更新时间:2005-06-16
似乎没有可行性;
1、首先不能直接读取OS的时区设置。因为用户可以随意修改本机的时区,可靠性不高。(Java如何读取客户端OS的LOcale,谁知道?) 2、作为B/s的客户端,如果读取IP,IP跟时区关系并不严格,很多IP查不到所在地区。 我以前的作法就是用户加上时区属性,用户设定自己的时区,系统得到他的时间后,会转换为服务器时间。 |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-17
看了以上朋友的回复
其实不然 问题是可以解决的 以下是我的解决办法: [code:1] timeZone_digital = new Date().getTimezoneOffset() 得到时区时间差值 以上是JS得到的 public static TimeZone getTimeZone(String timeZone_digital) { String gmt = ""; if (timeZone_digital != null) { int length = timeZone_digital.length(); String d = ""; String f = ""; if (length == 1) { gmt = "GMT"; } else if (timeZone_digital.startsWith("-")) { d = timeZone_digital.substring(0, 1); f = timeZone_digital.substring(1, length); gmt = "GMT+" + Integer.parseInt(f) / 60; } else { gmt = "GMT-" + Integer.parseInt(timeZone_digital) / 60; } } else { // 北京时区 return TimeZone.getTimeZone("GMT+8"); } return TimeZone.getTimeZone(gmt); } [/code:1] 这样就得到时区 TimeZone 了 接下就好办了 用 Locale default_locale = Locale.SIMPLIFIED_CHINESE; SimpleDateFormat cnF = new SimpleDateFormat( "yyyy-mm-dd hh:mm", default_locale); 就可以任意转了 |
|
| 返回顶楼 | |
|
最后更新时间:2005-06-17
好主意,哥们,我测试有点问题,来不及看了,先帖这里
[code:1] //timezone -8 , offset equals 420; //timezone -4 , offset equals 180; //timezone +4 , offset equals -300; //timezone +8 , offset equals -480; System.out.println(getTimeZone("420")); System.out.println(getTimeZone("180")); System.out.println(getTimeZone("-300")); System.out.println(getTimeZone("-480")); [/code:1] output: sun.util.calendar.ZoneInfo[id="GMT-07:00",offset=-25200000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] sun.util.calendar.ZoneInfo[id="GMT-03:00",offset=-10800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] sun.util.calendar.ZoneInfo[id="GMT+05:00",offset=18000000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] sun.util.calendar.ZoneInfo[id="GMT+08:00",offset=28800000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 似乎没有处理daylight saving time,呵呵[/code] |
|
| 返回顶楼 | |








