如何将系统的时区转换为用户的时区

时间:2011-08-29 11:13:11

标签: java timezone

我有一个来自我的应用程序的Timestamp值。用户可以在任何给定的本地TimeZone中。

此日期用于WebService和系统,无论时区用户总是选择服务器时区(位于美国),我需要将参数从系统转换为用户。 我试过这种方法:

/**
  * Adapt calendar to client time zone. 
  * @param calendar - adapting calendar   
  * @param timeZone - client time zone   
  * @return adapt calendar to client time zone   
*/  
public static Calendar convertCalendar(final Calendar calendar, 
                                       final TimeZone timeZone){
   Calendar ret = new GregorianCalendar(timeZone); 
   ret.setTimeInMillis(calendar.getTimeInMillis() +
     timeZone.getOffset(calendar.getTimeInMillis()) -
     TimeZone.getDefault().getOffset(calendar.getTimeInMillis())); 
   ret.getTime();      
   return ret; 
 }   

我的计算机上显示语法错误,表示声明“public static Calendar convertCalendar(Calendar calendar,TimeZone timeone)”有语法问题。

我正在使用JDK 1.3。我不确定我错过了什么。

有谁可以提高我对这个概念的理解?

1 个答案:

答案 0 :(得分:1)

事实上,要简单地获取一个具有相同原始时间值但位于不同TimeZone中的Calendar对象,它甚至比这更简单。

Calendar ret = Calendar.getInstance(timeZone);
ret.setTime(calendar.getTime());
return ret;

但我不确定这对你所需要的是否足够。无论何时输入或输出该Calendar(或其日期),标准Java API都会自动将值转换回本地时间。 JDBC语句(尽管这也可能取决于您的特定JDBC驱动程序),toString()等。例如,您可能需要将DateFormat与TimeZone实际配合使用,而不是设置Calendar的TimeZone。

如果您的Web服务引擎自动将传入的“日期”类型字段转换为日历,那么您可能会有一些选项,特别是如果字段的类型是真实的日期格式而不是纯字符串。

如果不知道如何使用这个TimeZone转换的日历,很难说更多。