2011-08-09 96 views
0

在C#:轉換UTC時間T0當地時間Java和C#

DateTime dateTime = DateTime.Parse(text, CultureInfo.InvariantCulture); 
string s = dateTime.ToLocalTime().ToString("s", CultureInfo.InvariantCulture)); 

text2011-06-30T05:48:34Z,並且s2011-6-30 13:48:34

在java中:

DateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
// explicitly set timezone of input if needed 
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); 
java.util.Date dateTime ; 
dateTime = df.parse(text); 
String s= df.format(dateTime)); 

s2011-6-30 05:48:34。如何在Java中實現ToLocalTime()函數?

回答

1

你的代碼df.parse(文本)從解析日期該字符串使用時區。然後在同一時區格式化日期。因此你得到了同樣的結果,顯然它必須這樣工作。 Unfortunately simpleDateFormat is not compatible with ISO8601。你可以使用功能更強大,設計更好的joda時間庫。或者,如果您始終確定您的輸入字符串始終在GMT,並以Z結尾,那麼您可以使用明確的代碼:

DateFormat dfParse = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
dfParse.setTimeZone(TimeZone.getTimeZone("UTC")); 
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); 
java.util.Date dateTime ; 
dateTime = dfParse.parse(text); 
String s= df.format(dateTime); 
1

首先設定日期爲UTC,並把它變成一個對象

java.util.Date dateTime ; 
df.setTimeZone(TimeZone.getTimeZone("UTC")); 
datetime = df.parse(text); 

//Now set this to the required local timezone 
df.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); 

String s= df.format(dateTime)); 

現在該字符串應該有適當的日期

-1
try{ 
     SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss"); 

      Date datetime = new Date(); 

     System.out.println("date "+sdf.format(datetime)); 

     sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); 

     System.out.println("asia/shanghai "+ sdf.format(datetime)); 

     sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 

     System.out.println("utc "+sdf.format(datetime)); 
    }catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

日曆僅用於日期處理(例如,添加日期爲2天)。此外,在您的代碼中,日曆不用於主題啓動者的問題。 – kan

+0

看起來更好,但我不喜歡解析方法隱式使用系統默認時區,而UTC是必需的。 – kan