C#将数据表中的日期格式从年月日更改为年月日

C#将数据表中的日期格式从年月日更改为年月日,c#,linq,C#,Linq,我尝试使用以下代码将dd/MM/yy转换为dd/MM/yyyy: int i = 0; string d = ""; foreach(DataRow dr in dataset.Tables["FinData"].Rows) { d = DateTime.ParseExact(dr["Date"], "dd/MM/yy", CultureInfo.InvariantCulture); dataset.Tables[0].Rows[i]["date"] = d; i++

我尝试使用以下代码将dd/MM/yy转换为dd/MM/yyyy:

int i = 0;
string d = "";

foreach(DataRow dr in dataset.Tables["FinData"].Rows)

{
    d = DateTime.ParseExact(dr["Date"], "dd/MM/yy", CultureInfo.InvariantCulture);
    dataset.Tables[0].Rows[i]["date"] = d;
    i++; 
}
但我似乎对datetime.parses的确切用法有问题

如何修改它

以下是完整的编码:

DateTimeFormatInfo formatProvider = new DateTimeFormatInfo();
formatProvider.Calendar.TwoDigitYearMax = DateTime.Now.Year;

label1.Text = fbd.SelectedPath;

Uri url = new Uri(@"http://www.google.com/finance/historical?q=KRX%3A005930&ei=-gUcWcG4Aom_0AS2sKyoBg&start=30&num=30&output=csv");

wc.DownloadFile(url, label1.Text + @"\finance.csv");
FileStream fs = new FileStream(label1.Text + @"\finance.csv", FileMode.Open);
StreamReader sr = new StreamReader(fs);
DataSet dataset = new DataSet();
dataset.Tables.Add("FinData");
dataset.Tables["FinData"].Columns.Add("Date");
dataset.Tables["FinData"].Columns.Add("Open");
dataset.Tables["FinData"].Columns.Add("High");
dataset.Tables["FinData"].Columns.Add("Low");
dataset.Tables["FinData"].Columns.Add("Close");
dataset.Tables["FinData"].Columns.Add("Volume");

string item;

while ((item = sr.ReadLine()) != null)

{
    myArr = item.Split(',');
    dataset.Tables["FinData"].Rows.Add(myArr);
}

int i = 0;
string d = "";

foreach(DataRow dr in dataset.Tables["FinData"].Rows)

{
    d = DateTime.ParseExact(dr["Date"], "dd/MM/yy", CultureInfo.InvariantCulture);
    dataset.Tables[0].Rows[i]["date"] = d;
    i++; 
}

您可以使用ToFourDigitYear方法将YY转换为YYYY

        string strDate = "31/12/17";
        System.Globalization.GregorianCalendar gregCal = new System.Globalization.GregorianCalendar();
        DateTime dtDate = new DateTime(gregCal.ToFourDigitYear(Convert.ToInt32(strDate.Substring(6, 2))), Convert.ToInt32(strDate.Substring(3, 2)), Convert.ToInt32(strDate.Substring(0, 2)));
使用

在我看来,这里已经有了答案:

您的csv文件(您提供了半加密链接)包含类似“2017年3月28日”的日期。即使
DateTime.ParseExact
对您来说是新的,也不难从它的名称推断它完全按照给定的格式解析日期字符串,而不是“dd/MM/yy”。这就是如何使用它:

d = DateTime.ParseExact(dr["Date"], "dd-MMM-yy", CultureInfo.InvariantCulture);

如果DataTable中的列设置为DataTime,则不需要更改该表。我不确定您为什么要尝试解析已经是DataTime对象的日期。如果您想以另一种格式显示数据时间,那么使用ToString(输入正确的格式),他不清楚datetime是如何工作的。你试图做的@Hong只有在类似于varchar列的情况下才有效。可能会重复缩进以使post更易于阅读,并改进文本结构。为什么它总是用dr[“Date”]“参数1:无法从“object”转换为“string”,我不明白。按照定义datatable的方式,日期列的数据类型应为string。否则,请使用
dr[“Date”].ToString()
d = DateTime.ParseExact(dr["Date"], "dd-MMM-yy", CultureInfo.InvariantCulture);