簡體   English   中英

C#:DateTime問題

[英]C#: DateTime problems

在DateTime類型的變量中,我有這個值= {30/07/2014 0:00:00}

我只想要日期:

var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

有了它,我正確地獲得了30/04/2014

但是當我想使用MM / dd / yyyy轉換時:

var aux2 = DateTime.ParseExact(aux, "MM/dd/yyyy", null);

我有這個錯誤:

該字符串表示GregorianCalendar中不允許的一個DateTime

為什么在aux2中出現此錯誤?

問題是您的語言環境設置。 在日期值上不帶參數的情況下調用ToString()會生成一個字符串,其模式day,month,year在區域設置之間的排列方式不同。 (我想您會得到一個字符串,其中包含Day,Separator,Month,Separator,Year)。
將該字符串傳遞給具有特定模式(MM / dd / yyyy)的DateTime.ParseExact ,要求該字符串必須與示例中所需的月,日,年完全相同。

您可以通過以下方式強制不變文化

 var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

這將產生一個具有后續ParseExact掩碼所需的模式的字符串

但是,不清楚為什么需要這些轉換。 日期不是字符串,您只需將其保留為日期,並僅在需要在某處(顯示,打印等)表示它時才使用轉換。

 Console.WriteLine("Date is:" + pedido.ord_cus_deliv_date.ToString("MM/dd/yyyy"));

當您在下面調用時: var aux = pedido.ord_cus_deliv_date.ToString().Split(' ')[0];

這將為您提供代碼“ 07-30-2014”,而不是“ 07/30/2014”,並且在轉換時會產生錯誤。 因此,要獲取“ 2014/07/30”,您必須編寫

var aux = pedido.ord_cus_deliv_date.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

以下是為您提供的總體代碼:

DateTime value = DateTime.Parse("30/07/2014 0:00:00"); //your date time value

var aux = value.ToString(CultureInfo.InvariantCulture).Split(' ')[0];

DateTime dt = DateTime.ParseExact(aux, "MM/dd/yyyy", CultureInfo.InvariantCulture);

var aux2 = dt.ToString(CultureInfo.InvariantCulture).Split(' ')[0]);

我希望這能幫到您

問候,
桑迪普

暫無
暫無

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

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