2011-05-17 11 views
2

我即將創建一個轉換器將日期轉換爲自定義格式。所有文化的最佳日期時間轉換器

實際上在一個轉換器中我有這樣一個日期17/05/2011 00:00:00,我想轉換爲簡單17/05/2011。但是,文化也應該考慮在內。

在我上面的例子中,我有英國文化,但如果用戶是美國人,那麼它將被轉換爲2011年5月17日。

實際上,我還需要一個ConvertBack將日期轉換回數據庫友好格式,以便將它保存回通用且安全而不會誤解。

這是我第一次嘗試它已經失敗:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      if(value == null) 
       return null; 

      DateTime date = DateTime.Parse(value.ToString(), culture); 

      return date; 
     } 

而且令人驚訝的是,上面的參數的CultureInfo是我們恩,不顧一切在Windows中設置爲英國。順便說一句,我正在使用這個轉換器的Silverlight 4,也許獲得文化是不同的在這裏......沒有那麼奇怪,我得到一個預期'字符串未被識別爲有效的日期時間。我認爲這是由於我在那裏的美國文化不能理解17個月。如何在Silverlight應用程序中設置我的本地文化?

然後我需要第二個轉換器只返回類似於上面的時間。我想我可能會使用重載DateTimeStyles.NoCurrentDateDefault它從日期生成只有時間,是否正確?

你的幫助非常感謝,

回答

1

設置一種文化可以在當前線程來完成,在應用程序中的每個線程可以在不同的文化。

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentculture(v=VS.100).aspx

好奇,如果你的電腦是在EN-GB但你的應用是在EN-US,我就揣應用程序被放入該文明確,可能通過配置文件。如果應用程序沒有被賦予一種文化,它就需要OS文化。

在ASP.NET Web應用程序中我記得你也可以在配置文件中指定文化。

您的最終目標只是爲了切斷DateTime的時間部分嗎?如果是這樣,那麼可用的屬性爲DateTime.Date,然後可以使用默認的.NET文化支持進行轉換。

ConvertBack方法可以節省時間作爲UTC,DateTime有多種方法可以保存到UTC。 UTC包含時區信息,並採用一種格式,適用於數據庫。

http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx

雖然你存儲日期爲日期,而不是字符串說實話,如果SQL Server數據庫服務器,這麼久了,再培養取爲你照顧。

+0

嗨,亞當,謝謝你的迴應。我已經嘗試過date.Date,但是最後的時間還在那裏,並沒有被切斷。 17/05/2011 00:00:00我可以不經意地使用一個子字符串並自己剪切它,但我希望使用一種更清晰的方式來檢索日期,而無需時間。 – Houman 2011-05-18 06:40:01

+0

關於文化,我已經檢查了App.config和Web.config,並且找不到任何設置爲US的文化。實際上EF4已經爲其服務設定了文化=中立。仍然在研究這個... – Houman 2011-05-18 06:41:52

+0

如果你想獲取日期到一個字符串,那麼你可以使用'DateTime.Now.ToShortDateString'。這符合語言環境。 – 2011-05-18 11:42:18