[英]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.