我需要存储createdOn(域类中的一个属性)。我正在获取系统时间并存储此属性的值。我的时区是(GMT + 5:30钦奈,加尔各答,孟买,新德里)当我上传到服务器时它存储UTC时间。我希望它是IST(印度标准时间)我的应用程序在Grails上使用Groovy。请帮我调整UTC / IST时差。在此先感谢
答案 0 :(得分:23)
不,不要那样做。永远!
如果您以本地形式存储次,那么您将陷入痛苦的世界。您基本上必须存储本地时间和本地时区,然后显示时间变成一个复杂的野兽(计算源和目标时区)。
所有时间都应存储为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的基础(目前在印度并不重要,因为它只有一个时区)。
答案 1 :(得分: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()));