论坛首页 Java版

请教:国际化时间怎么处理?

浏览 2789 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2005-06-09
我觉得有两种情况需要处理国际化的时间问题:

1 -- 客户端选择了某个时间 ,把这个时间以一标准时间保存到数据库中去

2 -- 从数据库提取一个标准时间(一条记录),显示在客户端
    因为各客户端所处时区不一样,所以要分别以各自时区来显示时间
 
   我现在想知道的是:客户端 怎么得到它自已的时区?

大家是怎么处理的??
   
最后更新时间:2005-06-09
我没有看明白你的需求.但是可以得到客户端的时区.
TimeZone.getDefault();

时间也可以根据不同的时区初始化.
Calendar.getIntance(TimeZone.getTimeZone(String args));
   
0 请登录后投票
最后更新时间:2005-06-10
引用


我没有看明白你的需求.但是可以得到客户端的时区.
TimeZone.getDefault();

时间也可以根据不同的时区初始化.
Calendar.getIntance(TimeZone.getTimeZone(String args));


TimeZone.getDefault(); 这个应该是得到服务器端的时区吧。

需求是这样的:
如在美国的客户 选择某个时间 作查询条件。而数据库保存的时间是我们北京时间
所以这应该把美国客户端的时间 转成 北京时间 来做查询!
而这转换是就少不了 要得到客户端的时区吧。
   
0 请登录后投票
最后更新时间:2005-06-10
哦!明白了.是不是没有客户端的BS.业务数据是时间敏感的,需要转换为北京时间作处理.给用户结果.因此无法得到用户处在哪一个时区就不能转换时间.

如果是这样的话,我觉得只有在页面上让用户选择自己所处的时区.在以cookie形式或是url重写的形式传过来.再在server端转换时间.不知道还有没有其它的办法?
   
0 请登录后投票
最后更新时间:2005-06-10
是这样的!

能不能用代码来自动得到客户端的时区???

解决这种需求 不知道是否还有其它方案?
   
0 请登录后投票
最后更新时间:2005-06-10
用js不可以吗?
   
0 请登录后投票
最后更新时间:2005-06-13
想想google是怎么做的?是不是通过ip地址来区分的呢?
   
0 请登录后投票
最后更新时间:2005-06-16
似乎没有可行性;

1、首先不能直接读取OS的时区设置。因为用户可以随意修改本机的时区,可靠性不高。(Java如何读取客户端OS的LOcale,谁知道?)

2、作为B/s的客户端,如果读取IP,IP跟时区关系并不严格,很多IP查不到所在地区。

我以前的作法就是用户加上时区属性,用户设定自己的时区,系统得到他的时间后,会转换为服务器时间。
   
0 请登录后投票
最后更新时间: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);

就可以任意转了

   
0 请登录后投票
最后更新时间: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]
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐