[英]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
)文化信息。
還要注意M
和MM
說明符之間的區別。 對於個位數的月份數, 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.