NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?
咨詢區
Shantanu Gupta:
我在項目中碰到了一個需求,需要將字符串格式的 dd/MM/yyyy 轉成 DateTime,比如下面這樣:
class?Program{static?void?Main(string[]?args){var?str=?"22/11/2009";DateTime?date?=?DateTime.Parse(str);}}但很不幸,我的代碼拋出異常了。
請問我該如何解決?不過我還意外發現 Parse 方法還有一個 IFormatProvider 參數的重載,不清楚是否它能解決?如果可以的話該怎么傳?
回答區
Samuel Neff:
你可以使用 ParseExact 方法,它需要你指定強轉成 DateTime 需要的字符串格式,方法簽名如下:
public?static?DateTime?ParseExact(string?s,?string?format,?IFormatProvider??provider){}所以你應該像下面這樣使用。
DateTime?date?=?DateTime.ParseExact(this.Text,?"dd/MM/yyyy",?CultureInfo.InvariantCulture);值得一提的是,IFormatProvider 一定要適配該時間字符串格式的區域 Cluture,如果不確定的話,可以使用通用的 CultureInfo.InvariantCulture。
Ricardo Sanchez:
其實你拋異常的本質在于,你當前 Culture 的時間格式和你的需要強轉的 字符串時間格式 是沖突的,要想解決的話,調整到正確的 Cluture 即可,參考如下代碼。
Thread.CurrentThread.CurrentCulture?=?new?CultureInfo("en-GB");?//dd/MM/yyyythis.Text="22/11/2009";DateTime?date?=?DateTime.Parse(this.Text);或者改成這樣。
using?System.Globalization;DateTime?date?=?DateTime.Parse(this.Text,?CultureInfo.CreateSpecificCulture("en-GB"));更多細節,參考這個鏈接:http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
點評區
這個問題我其實挺感慨的,去年做新加坡的項目就被這玩意坑過,我們中國的時間格式大多是:yyyy/MM/dd ,新加坡的格式是這樣的:Fri 30 Oct 22 2009,對,你沒有看錯,居然還有英文字母縮寫,這兩格式之間倒來倒去,絕對讓你防不勝防 ????????????
總結
以上是生活随笔為你收集整理的NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: foreach和IEnumerable+
- 下一篇: 手把手教你构建WPF官方开源框架源代码