2017-07-26 70 views
2

我正在努力解決問題。我有一個字符串日期看起來像這樣,「2015-05-02 01:00:00」,從數據庫中提取。C#日期時間從字符串轉換爲不同時區的日期時間

我知道這是英國時間,但我當地的時間是比利時時間。 我試圖以UTC存儲日期和(CEST或CET取決於季節),將其從英國時間提取出來。

我嘗試將Kind屬性設置爲英國時間,但結果似乎是在本地或utc時間。所以,我可以做一半的工作,但不是其餘的(例如,我仍然需要CEST/CET時間)。

我試圖用這樣的:

string dateString = (string) line["stringDate"]; 

DateTime ukTime = DateTime.Parse(dateString, new CultureInfo("en-GB", false)); 
DateTime belgianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ukTime, "Romance Standard Time"); 

的結果均爲ukTime和belgianTime相同的:2015年5月2日01:00:00有一種不明=。

這應該是2015年5月2日02:00:00對於belgianTime

+0

只等喬恩斯基特露面使用喬達:-) – derape

+0

您是否嘗試過'ukTime.ToLocalTime()'建議? – Pikoh

+0

我嘗試了一個小提琴,並在'belgianTime'中給出了這個結果:'2015/5/2 3:00:00'。如果我使用了'ToLocalTime',它和'ukTime'有相同的結果。 –

回答

1

如果你只需要添加源時區轉換方法它提供了所需的答案,即使沒有指定IFormatProvider

string dateString = (string) line["stringDate"]; 

DateTime ukTime = DateTime.Parse(dateString); 
DateTime belgianTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ukTime, 
    "GMT Standard Time", 
    "Romance Standard Time"); 

這給出時間Kind == Unspecified。但是,如果你使用:

var belgianTime = TimeZoneInfo.ConvertTime(ukTime, 
    TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"), 
    TimeZoneInfo.Local); 

的轉換,你會得到Kind == Local

+0

它運作良好,謝謝你。 – Grumshruk

0

使用下面的代碼行。

var time = DateTime.Parse(DateTime.Now.ToString()); 
     var clientZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
     var utcTime = TimeZoneInfo.ConvertTimeToUtc(time, clientZone); 
0

您必須使用ConvertTime方法。 ConvertTime

快速樣品 -

string s = "2015-05-02 01:00:00"; 

var dt = new DateTime(2015, 05, 02, 1, 0, 0); 

var t = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"), 
        TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time")); 
相關問題