2012-11-07 24 views
4

我从GAE文档中了解到生产服务器时区始终是UTC。在本地开发时,服务器时区设置为CET。有没有办法强制本地开发服务器也运行UTC?Google应用引擎 - 本地开发服务器时区

开发服务器在Mac OS上运行。

感谢,

雨果

回答

4

突然发现答案。为了设置服务器时区,只需进入Eclipse,“运行配置”,然后选择“虚拟机参数”并添加以下“-Duser.timezone = UTC”。

这将在此情况下将服务器时区设置为所需的值(UTC)。这非常方便,因为Google App Engine生产将始终运行UTC,而开发服务器(至少在我的情况下)是使用本地时区运行的。最终结果是我在dev和prod之间有不同的行为。

Hugues

+2

请提交一个错误 - 这是dev和prod环境之间的一个意想不到的区别。 –

+0

是的,我认为这是意想不到的,因为我一直发现TZ的DEV服务器处理方式一直很糟糕。 GAE的最新版本(例如1.7.3)似乎总是使用本地TZ,而在它用于使用UTC之前,除非您点击服务器的“重新启动”按钮。所以我总是被迫停止并重启服务器。 – doright

2

那么你可以使用此同时节省了时间价值,您的数据存储转换为特定的时区。

DateFormat utcFormat = new SimpleDateFormat(patternString); 
    utcFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    DateFormat indianFormat = new SimpleDateFormat(patternString); 
    utcFormat.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); 
    Date timestamp = utcFormat.parse(inputString); 
    String output = indianFormat.format(timestamp); 
+0

谢谢Ankur。你是对的,这将改变时区,但仅限于当前查询,我正在寻找一种方法将设置从服务器端更改为全局设置。刚刚找到答案(见下文)。谢谢你的帮助 ! – Hugues

1

GAE devServer默认使用本地时区。

我用这个代码用它强制UTC:

boolean isDevEnvironment = SystemProperty.environment.value() == SystemProperty.Environment.Value.Development; 

    if (isDevEnvironment) { 
     TimeZone.setDefault(DateTimeZone.UTC.toTimeZone()); 
     DateTimeZone.setDefault(DateTimeZone.UTC); 
    } 

你需要服务器启动和初始化过程中运行一次,在非常。

相关问题