2011-04-11 171 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