2017-01-16 53 views
3

我的ExpiryDate是「10/31/2015 12:00:00 AM」表示MM/dd/YYYY hh:mm:ss AM,但它是SAP的字符串。我怎樣才能將它轉換MM/DD/YYYY 下面的代碼不working.error:我如何使用linq解析字符串日期時間到真正的日期時間?

「字符串未被識別爲有效的DateTime。」

我該怎麼做,通過使用LINQ?

var query = deliveriesItemsbypaging.Select(tb => tb.ExpiryDate) 
       .AsEnumerable() // Do the rest of the processing locally 
       .Select(x => DateTime.ParseExact(x.Split(new char[0])[0], "MM/dd/yyyy", CultureInfo.InvariantCulture)); 

這個博客代碼工作:

var r = DateTime.ParseExact("10/31/2015 12:00:00 AM".Split(new char[0])[0], "MM/dd/yyyy", CultureInfo.InvariantCulture); 
+0

:毫米?例如:'DateTime.ParseExact(「10/31/2015 12:00:00 AM」,「M/d/yyyy h:mm:ss tt」,CultureInfo.InvariantCulture);' –

+0

您的代碼對我來說似乎沒問題。檢查'ExpiryDate'中的值,也許你有任何不正確的值 – Pikoh

+2

'ExpiryDate'的數據類型是什麼?爲什麼它不是數據庫本身的'DateTime'?將日期存儲爲字符串是一個非常嚴重的錯誤。而不是試圖解析數據,只是修復數據庫模式 –

回答

3

您可以使用DateTime.Parse這裏

var query = deliveriesItemsbypaging.Select(tb => tb.ExpiryDate) 
       .AsEnumerable() // Do the rest of the processing locally 
       .Select(x => DateTime.Parse(x, CultureInfo.InvariantCulture).Date); 

.Date這裏會給出根據需要,你只能沒有時間約會。

UPDATE: 如果你想獲得一個字符串的枚舉(具體格式),你可能要重寫它作爲

var query = deliveriesItemsbypaging.Select(tb => tb.ExpiryDate) 
       .AsEnumerable() // Do the rest of the processing locally 
       .Select(x => DateTime.Parse(x, CultureInfo.InvariantCulture).ToString("MM/dd/YYYY")); 
+0

這將重新調用日期時間對象,然後仍然需要將其轉換爲字符串。 –

+1

使用DateTime.Parse(x,CultureInfo.InvariantCulture).Date.ToString(「MM/dd/yyyy」)或更簡單,DateTime.Parse(x,CultureInfo.InvariantCulture).ToString(「MM/dd/yyyy」) –

1

你可以嘗試這樣的

var query = deliveriesItemsbypaging.Select(tb => tb.ExpiryDate) 
       .AsEnumerable() // Do the rest of the processing locally 
       .Select(x => DateTime.ParseExact(x.Split(new char[]{' '})[0], "MM/dd/yyyy", CultureInfo.InvariantCulture)); 
+2

OP的代碼應該也適用,因爲他傳遞了一個空的'char []',然後使用所有的空格字符作爲分隔符。 [MSDN](https://msdn.microsoft.com/en-us/library/b873y76a(v = vs.110).aspx):_「分隔符的每個元素都定義了一個由單個字符組成的單獨分隔符。分隔符參數爲空或不包含任何字符,則該方法將空白字符視爲分隔符。「_。所以你的方法是OP的一個子集。 –

+0

thx @TimSchmelter –

1
var query = deliveriesItemsbypaging 
    .Select(tb => tb.ExpiryDate) 
    .AsEnumerable() // Do the rest of the processing locally 
    .Select(x => DateTime.ParseExact(x, "MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture).ToString("MM/dd/yyyy")); 
2

使用特定字符串格式使用DateTime.ParseExact()時,您,您需要使用 "M/d/yyyy h:mm:ss tt"格式,下次使用.ToString("MM/dd/yyyy")

List<string> dateTimes = new List<string>(); 
dateTimes.Add("10/31/2015 12:00:00 AM"); 
var selectValue = dateTimes.Select(d => d) 
     .AsEnumerable() 
     .Select(d => DateTime.ParseExact(d, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture).ToString("MM/dd/yyyy")).ToList(); 

var r = DateTime.ParseExact("10/31/2015 12:00:00 AM", "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); 

結果:

enter image description here

1

下面的方法可以MM/DD/YYYY HH轉換:爲什麼你沒有使用正確的格式SS AM格式日期字符串可轉換日期

string DateConverter(string date) 
    { 
     string[] dmy= date.Split(' ')[0].Split('/'); 
     string convertedDay = dmy[1] + "/" + dmy[0] + "/" + dmy[2]; 
     return convertedDay; 
    } 
相關問題