2013-06-26 47 views
1

我已存儲的誕生VAR char格式的日期:如何找到多個子

例子:1989年8月15日

我想找出子串從它即我想單獨年份,月份和日期。我用以下代碼嘗試過:

string dateOfbirth = (string)(DataBinder.Eval(e.Item.DataItem, "dob")); 

int length = (dateOfbirth).Length; 
int index1 = dateOfbirth.IndexOf('-'); 
int index2 = dateOfbirth.IndexOf('-', index1 + 1); 
string year = dateOfbirth.Substring(0, index1); 
string month = dateOfbirth.Substring(index+1, index2-1); 
string day = dateOfbirth.Substring(index2, length); 

我收到一個錯誤消息。請提出解決方案。提前致謝。

+0

什麼錯誤說? –

+1

爲什麼不使用類似下面的方法來達到這種效果: 'string [] arrDateOfbirth = dateOfbirth.Split(' - ');' 然後,您可以通過逐步選擇數組... – Atrox111

回答

5

你可以試試這個

string [] date = dateOfbirth.Split('-'); 
string year = date[0]; 
string month = date[1]; 
string day = date[2]; 
4
DateTime dob = DateTime.ParseExact("1989-8-15","yyyy-M-dd",null); 
Console.WriteLine(dob.Year); 
Console.WriteLine(dob.Month); 
Console.WriteLine(dob.Day); 

清潔和方便。

UPD:改變ParseParseExact具有自定義日期格式

+0

I看到與文化相關的輸入在地平線上的問題... –

+0

而不是'.Parse'你應該使用'.TryParseExact'來避免由於不同culure設置造成的異常 – vijay

+0

我的不好,很好的建議。 –

0

要真正回答你的問題:

string dateOfbirth = "1989-8-15"; 

int length = (dateOfbirth).Length; 
int index1 = dateOfbirth.IndexOf('-'); 
int index2 = dateOfbirth.IndexOf('-', index1 + 1); 

string year = dateOfbirth.Substring(0, index1); 
string month = dateOfbirth.Substring(index1 + 1, index2 - index1 - 1); 
string day = dateOfbirth.Substring(index2 + 1, length - index2 - 1); 

這只是一個提供正確的參數到Substring方法的問題。

儘管如此,使用dateOfBirth.Split('-')可能會爲您的問題提供更好的解決方案。

2

我希望這將有助於:

string st= "1989-8-15";/
string st = (string)(DataBinder.Eval(e.Item.DataItem, "dob")); 

string [] stArr = st.Split('-'); 

所以,你現在有DOB項的數組。

0

使用TryParseExact避免例外,由於不同的文化設置

DateTime dateValue; 
var dateString="1989-08-15"; 
if(DateTime.TryParseExact(dateString, "yyyy-MM-dd", CultureInfo.InvariantCulture,DateTimeStyles.None, out dateValue)) 
{ 
// parse successfull 
Console.WriteLine(dateValue.Year); 
Console.WriteLine(dateValue.Month); 
Console.WriteLine(dateValue.Day); 
}