2011-04-25 74 views
1

我的問題是,我想從DateTime列表中找到最高DateTime?從DateTime的列表中查找最高日期時間

我有一個數組想string[] btime = new string[100];

在這陣,我存儲從該SQL-Server發出日期 SQL查詢是[CONVERT(varchar(10),GETDATE(),101)]它返回在MM/DD/YYYY格式的日期
然後我用我自己給出的時間連接日期
.btime[j] = SqlServerDate + " " + 15:20;等等;

現在,從這個定Array我想找到最高的日期和時間

所以,我用這個邏輯

string large="" 
large=btime[0]; 

for (int i = 0; i < j; i++) 
{ 
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0) 
    { 
     large = btime[i]; 
    } 
} 

但我得到的錯誤在

if(DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0) 

錯誤是字符串未被識別爲有效日期時間發生此錯誤是因爲我的系統日期時間格式爲YYYY/DD/MM

所以PLZ任何一個可以幫助我解決這個問題 我不想改變系統

+0

的ISO8601日期格式的優勢了很好的示範。 – pavium 2011-04-25 09:05:51

+0

你有沒有試過Convert.ToDateTime()? – SRKX 2011-04-25 09:13:28

+0

你幾點加入日期?它必須是'DateTime.Parse'函數有效的有效時間格式。您可以顯示數組的內容,在添加SQL Server時間之後以哪種格式構建日期? – 2011-04-25 09:11:34

回答

3

坎格式,

// Containing your datetime field 
string[] btime = new string[100]; 

var max = btime.Select(s => DateTime.Parse(s, "MM/dd/yyyy", CultureInfo.InvariantCulture)).Max(); 
+0

var max = dates.Select(s => DateTime.ParseExact(s,「dd/MM/yyyy」,System.Globalization.CultureInfo.InvariantCulture))。Max();這對我有用!謝謝。 – Singaravelan 2015-09-25 09:10:53

0

使用DateTime.ParseExact方法。 例子:

CultureProvider provider = CultureInfo.InvariantCulture; 
DateTime.ParseExact(btime[i], "yyyy/dd/MM", provider); 
0

你,可以使用DateTime.ParseExact()功能來做到這一點。請參閱以下代碼部分。

CurDate = DateTime.ParseExact(Name3, "yyyyMMddhhmmssffff", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None) 
6

其他人提出瞭解析DateTime的不同方法。這對我來說似乎毫無意義 - 如果您可以更改查詢,只需避免首先執行到字符串的轉換。您使用的轉換次數越少,您遇到這種問題的可能性就越小。

更改查詢,以便你最終DateTime值,然後找到最新的一個是微不足道的LINQ:

DateTime latest = dateTimes.Max(); 
0

可以使用DateTime.ParseExact() method

CultureProvider provider = CultureInfo.InvariantCulture; 
DateTime.ParseExact(btime[i], "MM/dd/yyyy HH:mm", provider); 

第二個參數是格式字符串。這指定了你的日期將如何格式化。

由於您在最後加入24小時的時間,您需要HH:mm(HH表示預計會有24小時的時間)。

+1

喬恩Skeet的答案是最好的,但我離開這個,因爲它涵蓋了24小時的時間被添加到日期。 – 2011-04-25 09:22:43

0

感謝大家。

我有某種答案:

string large = ""; 
large = btime[0]; 
IFormatProvider culture = System.Threading.Thread.CurrentThread.CurrentCulture; 

// This Code will convert the System Format in Thread, Not the Actual Format 
// of The System 
CultureInfo ciNewFormat = new CultureInfo(CultureInfo.CurrentCulture.ToString()); 
ciNewFormat.DateTimeFormat.ShortDatePattern = "MM/dd/yyyy"; 
System.Threading.Thread.CurrentThread.CurrentCulture = ciNewFormat; 

for (int i = 0; i < TimeBackupCounter; i++) 
{ 
    if (DateTime.Compare(DateTime.Parse(btime[i]),DateTime.Parse(large)) > 0) 
    { 
     large = btime[i]; 
    } 
} 
相關問題