无法更改java Web应用程序的时区

时间:2013-03-14 08:45:35

标签: hibernate jsf web-applications time zone

我有网络应用程序。它显示美国时间。我想让它显示印度时间。 我尝试过System.getProperty().setProperty("user.country","IN");System.getProperty().setProperty("user.variant","IN");设置属性,但仍显示使用时间。

我甚至试过Locale.setDefault(new Locale("en", "IN"));但是徒劳无功。

当我这样做时

SimpleDateFormat format = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa -- z");
System.out.println("Date: "+format.format(new Date())); 

结果是Date: 02013.March.14 AD 12:29 AM -- GMT-08:00。 我究竟做错了什么。

这是在tomcat 6中部署的JSF 1.1和Hibernate 3项目。

提前致谢。

3 个答案:

答案 0 :(得分:2)

试试这个

    SimpleDateFormat f = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa -- z");
    f.setTimeZone(TimeZone.getTimeZone("IST"));
    System.out.println(f.format(new Date()));

答案 1 :(得分:1)

添加以下行:

format.setTimeZone(TimeZone.getTimeZone("IST"));

答案 2 :(得分:0)

你的问题令人困惑。这真的是美国时间吗? JSF默认为UTC。如果它确实是美国时间(例如EDT),那么它应该在所有timeZone标签的<f:convertDateTime>属性中明确配置。您需要做的就是将“EDT”更改为“IST”。但这是一个非常明显的解决方案,我认为你实际上并没有在美国时间运行,而只是UTC。

您尝试解决问题也令人困惑。您说并标记您正在使用JSF,但您并没有尝试以JSF方式解决它,而是使用普通的Java方式。这真的不是你应该如何在JSF中转换日期/时间。您应该使用<f:convertDateTime>来完成工作而不是SimpleDateFormat

在任何情况下,您都需要配置所有<f:convertDateTime>代码,以明确将timeZone属性设置为IST

<h:outputText value="#{bean.date}">
    <f:convertDateTime timeZone="IST" />
</h:outputText>

请注意,如果您使用的是JSF 2.x,那么您还可以设置web.xml上下文参数以在应用范围内应用此更改。另请参阅Set a default time zone for f:convertDateTime