2010-07-30 38 views
0

我已經看過,看起來似乎無法提出完美的解決方案。所以,由於堆棧溢出是完美的,這可以解決我的問題。C#從字符串中讀取時區並將其轉換爲本地

我得到System.String日期時間從服務器(Microsoft CRM,如果你在意的話)。它們採用SQL格式(「2010-07-23T17:14:40-04:00」)。我想以.net System.DateTime類型讀取它,並保存時區信息,然後將其轉換爲本地時間。這個過程發生在不同的時區,我無法保持同步。基本上,我從CRM服務器獲得了很多CRM記錄(這似乎是用這個巴西時間(-4)來標記所有的時區),並且我想在我的配置文件中記下我看到的最新的一個(所以我沒有回去拿起我已有的價值觀)。不過,我想在當地時間寫下來。這裏有一個蒸餾

我想借此字符串「2010-07-23T17:14:40-04:00」,並運行一些代碼:

System.Datetime Get_Local_DT(string val); 

,將在美國東部時間在中部時間(-6)和「2010-07-23 16:14:40」迴歸「2010-07-23 15:14:40」( -5)。讓我知道你的想法。

回答

1

您的時間被加上巴西時間的原因是,這是附加到用戶執行查詢的時區。 CRM在數據庫中通用存儲,並且過濾視圖基於當前用戶生成該字符串。通過這種方式,無論何時您在CRM中創建記錄,您都會爲您的時區獲得一個時間。

如果您所做的只是保存日期/時間,以便日後檢查,我同意存儲爲UTC並進行UTC比較。

請注意,如果您使用任何ToLocalTime方法,您將在服務器上顯示本地時間,而不是實際用戶本地時間(除非它們與服務器位於同一時區)。我想這對你有多重要取決於你支持多少個時區(一個或多個)以及你的服務器所在的位置。

+0

我不認爲這是執行查詢的用戶所在的時區(我在東部時間,印第安納州)。 – 2011-02-16 18:29:41

0

???

private DateTime Get_Local_DT(string strTimestamp, int iUTCOffset) 
    { 
     DateTime _dt = DateTime.MinValue; 
     try 
     { 
      DateTime dt = DateTime.Parse(strTimestamp); 
      DateTime _returnDateTime = dt.ToUniversalTime().AddHours(iUTCOffset); 
      return _returnDateTime; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.ToString()); 
     } 
     return _dt; 
    } 
0

我認爲你應該使用System.DateTimeOffset類型來解決你的問題。

String d = "2010-07-23T17:14:40-04:00"; 
DateTimeOffset dt = DateTimeOffset.Parse(d); 
Console.WriteLine(dt.LocalDateTime + " " + dt.ToOffset(TimeSpan.FromHours(-2))); 
0

你可以將字符串解析成使用

string sqlDate = "2010-07-23T17:14:40-04:00"; 

DateTime dt = DateTime.Parse(sqlDate); 

下一個DateTime對象,你可以使用下面的語句來格式化:

dt.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo); 

我試過這段代碼:

void Main() 
{ 
    string sqlDate = "2010-07-23T17:14:40-04:00"; 

    DateTime dt = DateTime.Parse(sqlDate); 

    Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo)); 
} 

產量:2010 -07-24 02:44:40

我在IST。我希望這有幫助。

+0

由Randster發佈的代碼效果很好。但是,它可能需要格式化相應的日期,即yyyy-MM-dd HH:mm:ss – 2010-07-30 22:18:58

0

將其保存爲通用時間:

DateTime t = DateTime.Parse(str); 
    t.ToUniversalTime(); // save this 

然後顯示保存時間爲本地:

DateTime t = DateTime.Parse(str); 
    t.ToLocalTime(); // show this 

始終與通用按時上班,想想當地剛剛在MVC中的視圖。

+0

我不認爲這是正確的。將'str'視爲本地時間,然後將其轉換爲通用(用於保存),對不對?我從'-04:00'時區得到'string',我需要將THAT轉換爲通用。 – 2011-02-16 18:29:07

+0

如果將其保存爲通用時間,則可以使用該功能。仔細讀。 – Grozz 2011-02-17 23:10:54

相關問題