簡體   English   中英

IIS 字符串未被識別為有效的日期時間

[英]IIS String was not recognized as a valid DateTime

我有一個問題,

我有這種格式dd/MM/yyyy的字符串日期,然后使用Convert.ToDateTime(date)將其轉換為 DateTime object 它在 VS 中運行得很好,但是當我將它發布到 IIS 時,它總是拋出String was not recognized as a valid DateTime .

但是如果將格式更改為MM/dd/yyyy它在 IIS 中運行良好,但如果通過 VS 運行則會出錯。

string date =  "19/9/2019"  //"dd/MM/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via VS, error in IIS

string date = "09/19/2019" //"MM/dd/yyyy";
DateTime dt = Convert.ToDateTime(date); //run fine via IIS, error in VS

請指教

首先, "09/19/yyyy"不是可以解析為DateTime的有效字符串,它也應該在 IIS 上引發異常。

其次, Convert.ToDateTime(string)重載使用您機器上的CurrentCulture設置。 如果您的 VS 和 IIS 在不同的機器上,請檢查它們在兩台機器上的CurrentCulture設置。 我認為它們是完全不同的,其中一個沒有"dd/M/yyyy"作為標准日期格式。

另一方面,為了防止這種解析操作,您可以使用DateTime.ParseExact方法重載,並且您可以指定准確的格式和正確的(使用/作為DateSeparator )文化信息。

還要注意MMM說明符之間的區別。 對於個位數的月份數, MM說明符將生成帶有前導零的月份數(如09 ),但M說明符不會。

string date =  "19/9/2019";
DateTime myDate = DateTime.ParseExact("dd/M/yyyy", date, CultureInfo.InvariantCulture); 

或者

string date =  "19/09/2019";
DateTime myDate = DateTime.ParseExact("dd/MM/yyyy", date, CultureInfo.InvariantCulture); 

您收到錯誤只是因為服務器端默認文化與開發站點不同。

您應該使用DateTime.TryParseExact或使用DateTime.TryParse指定適當的CultureInfo (例如,用戶的文化。)

您應該將適當的CultureInfo應用於ToString - 可能是CultureInfo.InvariantCulture

例子:

var varDate = DateTime.ParseExact(txtDate.Text, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
DateTime dt3 = Convert.ToDateTime(varDate);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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