2012-03-04 132 views
0

我的服務器位於美國,我的客戶位於印度。以美國格式保存日期時間並以英國格式顯示

我試着寫了一個函數,當我通過美國格式時可以返回英國日期,反之亦然。但它不起作用。

// client culture 
System.Globalization.CultureInfo UKcultureInfo = new System.Globalization.CultureInfo("en-gb"); 
// server culture 
System.Globalization.CultureInfo UScultureInfo = new System.Globalization.CultureInfo("en-us"); 
public DateTime ReturnUKDate(string date) 
{ 
      return DateTime.Parse(date, UKcultureInfo); 
} 

,但是當我通過ReturnUKDate(「2012年12月29日」)

我得到這個錯誤字符串未被識別爲有效的DateTime。

+0

你將日期值保存到哪裏?數據庫,XML或其他(請指定)? – code4life 2012-03-05 16:20:26

回答

1

首先,您應該始終使用將您的日期保存爲UTC - 不是當地的時間格式。如果可以的話,也不要將日期保存爲字符串(對於我猜測的XML來說是不可避免的),但是強類型化,例如SQL Server支持DateTime數據類型。從UTC開始,您可以轉換爲任何您想要的地方 - 用於顯示目的

爲了解析一個已知格式的特定日期字符串,你可以使用ParseExcactTryParseExcact,這樣你就可以傳遞確切的格式字符串。

+0

請添加一些示例 – Moksha 2012-03-04 17:53:04

+0

您不應*總是*保存爲UTC。例如,如果我想表示每週本地時間晚上7點發生的週期性事件,那麼爲了找出發生該事件的時刻,我需要存儲時區,並且存儲當地時間太有意義,而不是一些任意的UTC值進行轉換。 – 2012-03-04 17:55:10

+0

@JonSkeet:爲什麼你不能從UTC時間導出本地事件時間? – BrokenGlass 2012-03-04 17:57:34

0

錯誤是因爲您正在傳遞美式日期並指定英國文化。

這工作

var dt = DateTime.Parse("12/29/2012", new System.Globalization.CultureInfo("en-us")); 

等做到這一點

var dt = DateTime.Parse("29/12/2012", new System.Globalization.CultureInfo("en-gb")); 

我不知道在其他的答案中指出你正在試圖做的是正確的。