簡體   English   中英

字符串未被識別為有效的日期時間“格式 dd/MM/yyyy”

[英]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 這是什么? 也需要通過這個嗎? 如果是,如何在這種情況下使用它?

編輯

ParseParseExact之間有什么區別?

編輯 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);

有關更多詳細信息,請訪問此處:

http://msdn.microsoft.com/en-us/library/5hh873ya.aspx

基於這個參考,下一個方法對我有用:

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM