![](/img/trans.png)
[英]DateTime parsing error while parsing dd/MM/yyyy format. String was not recognized as valid datetime
[英]String was not recognized as a valid DateTime " format dd/MM/yyyy"
我正在嘗試將我的字符串格式值轉換為格式為dd/MM/yyyy
的日期類型。
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
問題是什么? 它有第二個覆蓋要求IFormatProvider
。 這是什么? 我也需要通過這個嗎? 如果是,如何在這種情況下使用它?
編輯
Parse
和ParseExact
之間有什么區別?
編輯 2
Slaks 和 Sam 的兩個答案都對我有用,目前用戶正在提供輸入,但我將通過使用 maskTextbox 確保它們是有效的。
考慮到類型安全、性能或您喜歡的其他方面,哪個答案更好
使用DateTime.ParseExact
。
this.Text="22/11/2009";
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", null);
您需要調用ParseExact
,它會解析與您提供的格式完全匹配的日期。
例如:
DateTime date = DateTime.ParseExact(this.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
IFormatProvider
參數指定用於分析日期的區域性。
除非您的字符串來自用戶,否則您應該傳遞CultureInfo.InvariantCulture
。
如果字符串確實來自用戶,則應傳遞CultureInfo.CurrentCulture
,它將使用用戶在控制面板的區域選項中指定的設置。
解析 DateTime 的字符串表示是一件棘手的事情,因為不同的文化有不同的日期格式。 .Net 知道這些日期格式,並在您調用DateTime.Parse(this.Text)
時從您當前的文化( System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
)中提取它們;
例如,字符串“22/11/2009”與美國 (en-US) 的ShortDatePattern不匹配,但與法國 (fr-FR) 匹配。
現在,您可以調用DateTime.ParseExact
並傳遞您期望的確切格式字符串,或者您可以將適當的文化傳遞給DateTime.Parse
以解析日期。
例如,這將正確解析您的日期:
DateTime.Parse( "22/11/2009", CultureInfo.CreateSpecificCulture("fr-FR") );
當然,你不應該只是隨機選擇法國,而是適合你需要的東西。
您需要弄清楚System.Threading.Thread.CurrentThread.CurrentCulture
設置為什么,以及它是否/為什么與您的預期不同。
雖然上述解決方案都有效,但您也可以使用以下內容修改 webconfig 文件...
<configuration>
<system.web>
<globalization culture="en-GB"/>
</system.web>
</configuration>
您可能需要為該特定日期格式指定文化,如下所示:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB"); //dd/MM/yyyy
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
有關更多詳細信息,請訪問此處:
基於這個參考,下一個方法對我有用:
// e.g. format = "dd/MM/yyyy", dateString = "10/07/2017"
var formatInfo = new DateTimeFormatInfo()
{
ShortDatePattern = format
};
date = Convert.ToDateTime(dateString, formatInfo);
花了很多時間后,我解決了問題
string strDate = PreocessDate(data);
string[] dateString = strDate.Split('/');
DateTime enter_date = Convert.ToDateTime(dateString[1]+"/"+dateString[0]+"/"+dateString[2]);
private DateTime ConvertToDateTime(string strDateTime)
{
DateTime dtFinaldate; string sDateTime;
try { dtFinaldate = Convert.ToDateTime(strDateTime); }
catch (Exception e)
{
string[] sDate = strDateTime.Split('/');
sDateTime = sDate[1] + '/' + sDate[0] + '/' + sDate[2];
dtFinaldate = Convert.ToDateTime(sDateTime);
}
return dtFinaldate;
}
使用它將字符串轉換為日期時間:
Datetime DT = DateTime.ParseExact(STRDATE,"dd/MM/yyyy",System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat)
就像上面有人說的那樣,您可以將其作為字符串參數發送,但它必須具有以下格式:例如,“20130121”,您可以直接從控件中將其轉換為該格式。 因此,例如,您將從如下文本框中獲取它:
date = datetextbox.text; // date is going to be something like: "2013-01-21 12:00:00am"
將其轉換為:'20130121' 你使用:
date = date.Substring(6, 4) + date.Substring(3, 2) + date.Substring(0, 2);
以便SQL可以將其轉換並放入您的數據庫中。
以下代碼為我工作:
DateTime date = DateTime.Parse(this.Text, CultureInfo.CreateSpecificCulture("fr-FR"));
命名空間
using System.Globalization;
你也可以使用
this.Text = "22112009";
DateTime newDateTime = new DateTime(Convert.ToInt32(this.Text.Substring(4, 4)), // Year
Convert.ToInt32(this.Text.Substring(2,2)), // Month
Convert.ToInt32(this.Text.Substring(0,2)));// Day
我還注意到,有時如果您的字符串在前面或結尾有空白空間或在 DateTime 值中附加任何其他垃圾字符,那么我們也會收到此錯誤消息
手動更改:
string s = date.Substring(3, 2) +"/" + date.Substring(0, 2) + "/" + date.Substring(6, 4);
從 2015 年 11 月 22 日起,它將在 2015 年 11 月 22 日轉換
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.