2011-12-28 24 views
2

我通過HTTP Post將數據從Android發送到運行PHP和MySQL的服務器。 Android用戶通過此基礎架構共享消息。與PHP/MySQL服務器通信 - 正確的時區

我有以下問題: 我想顯示消息的日期和時間。但我不知道如何正確地做到這一點。 如果我通過PHP(date('Y-m-d H:i:s'))設置時間/日期,我總是在我的PHP服務器上配置的時區。但是一個從其他時區發佈消息的人會看到錯誤的時間,甚至錯誤的日期。

所以我認爲Android應用程序必須發送時間+時區到服務器。在Android中我能得到通過時區:

Calendar cal = Calendar.getInstance(); 
TimeZone tz = cal.getTimeZone(); 

所以我可以通過HTTP發送namevaluepairs中的日期/時間和時區的PHP服務器。 但我不知道該怎麼做在PHP網站上正確地存儲在MySQL數據庫。

回答

1

在PHP中可以使用gmdate('Y-m-d H:i:s')設置UTC時間服務器,然後用東西將其轉換回客戶端時區像

public static String convertToLocalTime(String UTCtime) { 

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    df.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date date; 
    try { 
     date = df.parse(UTCtime); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return ""; 
    } 
    df = new SimpleDateFormat("d MMM"); 
    DateFormat timeStringPart = new SimpleDateFormat("h:mma"); 
    return df.format(date)+", "+timeStringPart.format(date).toLowerCase(); 

} 
+0

你的解決方案似乎很好。但是,您的代碼在Android上發生java.lassTask java.util.Date類的崩潰。 – tobias 2011-12-28 18:33:41

2

將您的日期存儲爲GMT,然後在Android中進行翻譯。

+0

你能不能給一個提示怎麼辦那 – tobias 2011-12-28 16:36:54

+0

我認爲你的'tz'將有GMT抵消值。在將其發送到服務器之前,只需在您的(android)客戶端中調整日期即可。當你隨後讀取數值時,做相反的操作。 – ethrbunny 2011-12-28 16:40:38

0

經驗好的做法是讓你的後臺存儲一切UTC/GMT與偏移(MySQL的自動爲您完成此,如果您的服務器的時區爲UTC/GMT。

然後在你的前端可以調節所有時間基於關閉用戶的語言環境。

+0

你的意思是PHP服務器設置時間,並在Android我調整到用戶本地時區? – tobias 2011-12-28 16:40:29

+0

就是這樣的,是的。例如,如果您將時間存儲爲UTC時間01:00,則可以將其顯示在設備的時區中。所以格林威治標準時間-7將在前一天的14:00,格林威治標準時間+3將在同一天的04:00。等 – jlindenbaum 2011-12-28 17:07:58