2011-04-11 49 views
4

我需要存储createdOn(域类中的一个属性)。我获取系统时间并存储此属性的值..我的时区是(格林尼治标准时间+5:30晨奈,加尔各答,孟买,新德里)当我上传到它存储UTC时间的服务器。我希望它是IST(印度标准时间)我的应用程序在Grails上使用Groovy。请帮助我调整UTC/IST时差。谢谢在Java或Groovy中转换UTC时间T0本地时间

回答

22

不,不要这样做。永远!

如果你商店次在当地的形式,你在一个痛苦的世界。您基本上必须同时存储本地时间和本地时区,并且时间显示将成为一个复杂的野兽(计算源时区和目标时区)。

所有时间应该是存储为作为UTC。没有例外。在任何地方写入(尽快)之前,用户输入的时间应该转换为UTC。

要显示给用户的时间应尽可能从UTC转换为本地时间。

从曾经陷入多时区泥潭的人那里得到这个建议。使用UTC并仅在必要时进行转换将使您的生活变得更加轻松。


一旦你的UTC时间,它的使用SimpleDateFormat类把它转换的问题:

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

public class scratch { 
    public static void main (String args[]) { 
     Date now = new Date(); 
     SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); 
     sdf.setTimeZone (TimeZone.getTimeZone ("IST")); 
     System.out.println ("Time in IST is " + sdf.format (now)); 
    } 
} 

此输出:

Time in IST is 2011-04-11 13:40:04 

与当前时间同意Mirzapur,我认为这是IST的基础(目前印度不重要,因为它只有一个时区)。

+0

感谢您的回应......我正在保存UTC时间,但在显示给用户时我需要转换为IST(印度标准时间),所以我该怎么做......? – maaz 2011-04-11 07:00:38

+0

@Hussain,查看如何在IST中获取时间的更新。 – paxdiablo 2011-04-11 08:16:20

+1

@paxdiablo是否会照顾夏时制在我设定的时区? – 2012-12-17 10:28:42

3
 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     sf.setTimeZone(TimeZone.getTimeZone("GMT")); 
     System.out.println(sf.format(new Date())); 


     SimpleDateFormat sf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     sf1.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); 
     System.out.println(sf1.format(new Date())); 
     System.out.println(Arrays.asList(TimeZone.getDefault())); 
+1

感谢您的回应苏雷什...这就是我一直在寻找... – maaz 2011-04-11 08:39:05

相关问题